(UE4) 动态加载DLL

目前还没有实现,实在搞不懂为什么,大概代码如下:

(UE4) 动态加载DLL
//--------------------------------------------------------------------------------------

    FString filePath = FPaths::Combine(*FPaths::GameDir(), TEXT("MFCDLL/"),TEXT("OpenFile.dll"));

    typedef FCString(WINAPI *getPath)(void);

    FCString str;

    if (FPaths::FileExists(filePath))

    {

        void *DLLHandle;

        DLLHandle = FPlatformProcess::GetDllHandle(*filePath); // Retrieve the DLL.

        if (DLLHandle != NULL)

        {

            getPath getFilePath=NULL;

            FString procName = "getFilePath";

            getFilePath=(getPath)FPlatformProcess::GetDllExport(DLLHandle, *procName);

            str=getFilePath();

        }

    }

    //-----------------------------------------------------------------------------
View Code

 有一个问题是 自从VS2005以后  新建的工程默认都是采用UNICODE码 来生成的,这时与其他采用别的编码方式的程序进行交互时就会出现错误!

比如,MFC DLL文件 返回int值给UE4  可以正常返回,但是返回 char*  或者是CString就会出错!

还好  有位大神写了这个东西,使用这个 将CString .getbuffer(0)转换为char*  就可以在UE4中调用了!

//将单字节char*转化为宽字节wchar_t*  

wchar_t* AnsiToUnicode( const char* szStr )  

{  

    int nLen = MultiByteToWideChar( CP_ACP, MB_PRECOMPOSED, szStr, -1, NULL, 0 );  

    if (nLen == 0)  

    {  

        return NULL;  

    }  

    wchar_t* pResult = new wchar_t[nLen];  

    MultiByteToWideChar( CP_ACP, MB_PRECOMPOSED, szStr, -1, pResult, nLen );  

    return pResult;  

}  

  

//将宽字节wchar_t*转化为单字节char*  

inline char* UnicodeToAnsi( const wchar_t* szStr )  

{  

    int nLen = WideCharToMultiByte( CP_ACP, 0, szStr, -1, NULL, 0, NULL, NULL );  

    if (nLen == 0)  

    {  

        return NULL;  

    }  

    char* pResult = new char[nLen];  

    WideCharToMultiByte( CP_ACP, 0, szStr, -1, pResult, nLen, NULL, NULL );  

    return pResult;  

}  

http://blog.csdn.net/hellward/article/details/5364927   原文地址!

 

永远不会忘记  2015年的清明节  第一天  发着烧、去公司解决打开文件对话框的问题,坐的腰都疼了,都快要放弃的时候,选择了坚持一下下,结果就遇见了转折。有时候事情就是这样,多坚持一下,也许就会出现黎明。

你可能感兴趣的:(dll)