わかりましたので、ここで危険なほど再投稿に近づいていますが、私の状況は、この機能に関する他の多くのポスターとは少し異なります. 私は昔に書かれた DLL とやり取りしていますが、私が持っているのはファイルだけです。私は .lib ファイルを持っていないので、LoadLibrary および GetProcessAddress 関数を使用しています。MSDN Web サイトのチュートリアルに従って、基本的な構造を取得しました。DLL はプロジェクト フォルダにあります。コンパイルします。実行時に「hinstLib」の数値を取得しているので、DLL が見つかったと想定しています。「ProcAdd」変数の null 値を取得しています。他の投稿者は、extern C を DLL 関数に入れることで問題を解決しましたが、実際にはそのオプションはありません。言うまでもなく、私の知る限り、この DLL はプレーンな C で書かれています。私はインターフェイス ドキュメントを持っており、関数名が正しいことを確信しています (これらの目的のために一般的な例に置き換えました)。ProcAdd 割り当てが NULL になったため、正直なところ何も実行しませんでした。なぜこれが関数の割り当てに0の値を与えているのかについての考えは大歓迎です。注: 残念ながら、さまざまな理由により、DLL をアップロードできません。
#include <iostream>
#include "stdafx.h"
#include "Windows.h"
#include <stdio.h>
typedef int(__cdecl *MYPROC)(LPWSTR);
using namespace std;
int main()
{
HINSTANCE hinstLib;
MYPROC ProcAdd;
BOOL fFreeResult, fRunTimeLinkSuccess = FALSE;
hinstLib = LoadLibrary(TEXT("dllName.dll"));
if (hinstLib != NULL)
{
ProcAdd = (MYPROC) GetProcAddress(hinstLib, "funcName");
// If the function address is valid, call the function.
if (NULL != ProcAdd)
{
fRunTimeLinkSuccess = TRUE;
//(ProcAdd) (L"Message sent to the DLL function\n");
}
// Free the DLL module.
fFreeResult = FreeLibrary(hinstLib);
}
// If unable to call the DLL function, use an alternative.
if (! fRunTimeLinkSuccess)
printf("Message printed from executable\n");
return 0;
}