0 c++ winapi c++builder c++builder-xe3
我尝试从 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");
}
}
Run Code Online (Sandbox Code Playgroud)
dllhandle 不断返回空值。
问题大概在这里:
(wchar_t*)"PBusDrv.dll"
Run Code Online (Sandbox Code Playgroud)
您将 ANSI 字符串(每个字符 1 个字节)转换为宽字符串(每个字符 2 个字节)。这永远行不通。
您有 3 个选择:
1- 使用 ANSI 版本的 LoadLibrary 函数
dllhandle = LoadLibraryA("PBusDrv.dll");
Run Code Online (Sandbox Code Playgroud)
2-根据项目配置使用适当的字符串类型:
dllhandle = LoadLibrary(_T("PBusDrv.dll"));
Run Code Online (Sandbox Code Playgroud)
3- 使用宽字符串版本的 LoadLibrary,同时传递宽字符串作为输入
dllhandle = LoadLibraryW(L"PBusDrv.dll");
Run Code Online (Sandbox Code Playgroud)
注意:不要将非特定函数宏与一种特定类型的字符串混合使用。例如,不要这样做:
dllhandle = LoadLibrary(L"PBusDrv.dll");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
630 次 |
| 最近记录: |