c++winapic++builderc++builder-xe3

Calling a dll function C++ rad studio xe3


I try to call a function from a dll, but it doesn't seem to work fine. Here is the code:

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 keeps returning with a null value.


Solution

  • The problem is probably here:

    (wchar_t*)"PBusDrv.dll"
    

    You are casting an ANSI string (1 byte per char) as a wide-string (2 bytes per char). This is never going to work.

    You have 3 options:

    1- Use the ANSI version of the LoadLibrary function

    dllhandle = LoadLibraryA("PBusDrv.dll");
    

    2- Use the appropriate string type according to the project configuration:

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

    3- Use the wide-string version of LoadLibrary, while passing a wide-string as input

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

    Note: Don't mix non-specific function macros with one particular type of string. For example, don't do this:

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