0

dll から関数を呼び出そうとしていますが、うまく動作していないようです。コードは次のとおりです。

HMODULE  dllhandle;
#include "Unit1.h"
#include <windows.h>
#include <iostream.h>  
#include <conio.h>
void __fastcall TForm1::Button1Click(TObject *Sender)
{

    dllhandle = LoadLibrary((wchar_t*)"PBusDrv.dll");

if(dllhandle)
{
typedef int (*PBUSCONNECTEX)(String aux1, String aux2, String ip);
PBUSCONNECTEX PBusConnectEx;

PBusConnectEx =  (PBUSCONNECTEX)GetProcAddress(dllhandle,  "PBusConnectEx");

PBusConnectEx(" "," ","192.168.30.252");
   }
}

dllhandle は null 値を返し続けます。

4

1 に答える 1

5

問題はおそらくここにあります:

(wchar_t*)"PBusDrv.dll"

ANSI 文字列 (1 文字あたり 1 バイト) をワイド文字列 (1 文字あたり 2 バイト) としてキャストしています。これはうまくいきません。

次の 3 つのオプションがあります。

1- LoadLibrary 関数の ANSI バージョンを使用する

dllhandle = LoadLibraryA("PBusDrv.dll");

2-プロジェクト構成に従って、適切な文字列型を使用します。

dllhandle = LoadLibrary(_T("PBusDrv.dll"));

3- ワイド文字列を入力として渡しながら、LoadLibrary のワイド文字列バージョンを使用する

dllhandle = LoadLibraryW(L"PBusDrv.dll");

注: 1 つの特定のタイプの文字列に、特定されていない関数マクロを混在させないでください。たとえば、次のようにしないでください。

dllhandle = LoadLibrary(L"PBusDrv.dll");
于 2015-08-13T19:48:35.430 に答える