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 不断返回空值。

4

1 回答 1

5

问题大概出在这里:

(wchar_t*)"PBusDrv.dll"

您将 ANSI 字符串(每个字符 1 个字节)转换为宽字符串(每个字符 2 个字节)。这永远行不通。

您有 3 个选项:

1- 使用 ANSI 版本的 LoadLibrary 函数

dllhandle = LoadLibraryA("PBusDrv.dll");

2-根据项目配置使用适当的字符串类型:

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

3- 使用 LoadLibrary 的宽字符串版本,同时将宽字符串作为输入

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

注意:不要将非特定函数宏与一种特定类型的字符串混合。例如,不要这样做:

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