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

posted @ 2015-04-04 17:01  沙中世界  阅读(2689)  评论(0编辑  收藏  举报