我是C ++的新手并尝试将现有的C ++代码转换为DLL,以便我可以通过DLL导入从C-sharp调用。代码C ++进行加密和解密。
我已经成功地在C ++控制台应用程序中执行了该功能。但是,当我将相同的代码转换为DLL并尝试通过导入DLL从不同的C ++控制台应用程序运行时,我无法加载应用程序,因为在相同的DLL代码中我有一个证书,它是资源文件夹的一部分,它应该是在执行中可用。
虽然我手动放置了证书,但我不确定为什么DLL无法找到证书。
有什么想法吗?
此致 Zeeshan Qureshi
答案 0 :(得分:0)
通过调用FindResource(NULL, ...)
,您使用进程资源表进行解析,而不是DLL。这可以在一个EXE中使用,但是通过将代码移动到DLL以及带有它的资源,您需要查看DLL模块的资源表。
你的DLL的DllMain
看起来应该是这样的,如果你还没有,那就添加一个:
HINSTANCE hInstDLL; // <=== LOOK HERE (added global)
BOOLEAN WINAPI DllMain(
IN HINSTANCE hDllHandle,
IN DWORD nReason,
IN LPVOID Reserved )
{
switch ( nReason )
{
case DLL_PROCESS_ATTACH:
hInstDLL = hDllHandle; // <<=== LOOK HERE (set global)
break;
default:
break;
}
return TRUE;
}
从那起你的FindResource
调用应该使用hInstDLL
作为第一个参数,而不是NULL
。这应该让你的资源查找使用适当的资源表。
祝你好运。