winapi — вызов функции dll C ++ rad studio 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");
}
}

dllhandle продолжает возвращаться с нулевым значением.

0

Решение

Проблема в наверное Вот:

(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");
4

Другие решения


По вопросам рекламы [email protected]