Я пытаюсь вызвать функцию из 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 продолжает возвращаться с нулевым значением.
Проблема в наверное Вот:
(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");