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;
}
ここでは何が起こっていますか?
なぜそれは空ですか?それは何かを返す必要があります。 – tkausl
未定義の動作です。あなたの 'DllMain'関数は値を返すことになっています。どちらか、 'DllMain'関数を書かずに、その関数のデフォルトのWindows版を呼び出させてください。 – PaulMcKenzie
@PaulMcKenzie私は戻り値を入れましたが、問題はまだ起こっています。 – user2498421