2017-12-21 4 views
0

2つのプロジェクトでセットアップされたVisual Studio 2017のシンプルなソリューションがあります。最初のプロジェクトは、2番目のプロジェクトから生成されたDLLにリンクする(ロード時リンク)実行可能ファイルです。 2番目のプロジェクトは、単一の関数をエクスポートし、空のDllMainエントリポイントを含む単純なテストDLLです。空のDllMainを使用するDLLへのロードリンク時にアプリケーションが起動しない(0xC0000142)

ソリューションをデバッグしようとすると、「アプリケーションを正しく起動できませんでした(0xc0000142)」というエラーが表示されます。アプリケーションを閉じるには、OKをクリックしてください。私は0xc0000142の意味を探してみましたが、開発の観点から有用なものは見つかりませんでした。

DLLからDllMainエントリポイントを削除して再構築すると、すべて正常に動作します。ここ

は、DLLヘッダ(MyMath.h)である:ここ

#pragma once 

#ifdef THE_DLL_EXPORT 
    #define API __declspec(dllexport) 
#else 
    #define API __declspec(dllimport) 
#endif 

#ifdef __cplusplus 
    extern "C" { 
#endif 

API int AddNumbers(int a, int b); 

#ifdef __cplusplus 
    } 
#endif 

はDLLコードファイル(MyMath.cpp)である:

#include "MyMath.h" 
#include <stdio.h> 
#include <Windows.h> 

extern "C" BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD fdwReason, LPVOID lpvReserved) 
{ 
} 

int AddNumbers(int a, int b) 
{ 
    return a + b; 
} 

ここからメインコードファイルでありますDLL(Source.cpp)を使用する最初のプロジェクト:

#include <iostream> 
#include "MyMath.h" 
using namespace std; 

int main() 
{ 
    int x = 3; 
    int y = 4; 
    cout << x << " + " << y << " = " << AddNumbers(x, y) << endl; 
    cin.get(); 
    return 0; 
} 

ここでは何が起こっていますか?

+0

なぜそれは空ですか?それは何かを返す必要があります。 – tkausl

+0

未定義の動作です。あなたの 'DllMain'関数は値を返すことになっています。どちらか、 'DllMain'関数を書かずに、その関数のデフォルトのWindows版を呼び出させてください。 – PaulMcKenzie

+0

@PaulMcKenzie私は戻り値を入れましたが、問題はまだ起こっています。 – user2498421

答えて

1

DllMainがTRUEを返していませんでした。 FALSEまたは0を返すと、アプリケーションはエラーコード0xc0000142で失敗します。

関連する問題