我尝试从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值继续返回。
答案 0 :(得分:4)
问题在于可能:
(wchar_t*)"PBusDrv.dll"
您正在将ANSI字符串(每个字符1个字节)转换为宽字符串(每个字符2个字节)。这永远不会奏效。
您有3个选项:
1-使用ANSI版本的LoadLibrary函数
dllhandle = LoadLibraryA("PBusDrv.dll");
2-根据项目配置使用http://docs.aws.amazon.com/AWSJavaScriptSDK/guide/node-examples.html:
dllhandle = LoadLibrary(_T("PBusDrv.dll"));
3-使用宽字符串版本的LoadLibrary,同时传递宽字符串作为输入
dllhandle = LoadLibraryW(L"PBusDrv.dll");
注意:请勿将非特定功能宏与一种特定类型的字符串混合使用。例如,不要这样做:
dllhandle = LoadLibrary(L"PBusDrv.dll");