在VC ++中创建Win32 dll并启用CLR但没有CRT

时间:2015-06-30 02:48:50

标签: visual-c++ clr crt

我正在尝试创建一个简单的Win32 DLL,其中包含一个函数,该函数将根据进程/应用程序的名称返回应用程序主窗口的窗口ID列表。最有效的方法是利用托管代码Process.GetProcessesByName()方法。但是,虽然生成的DLL在某些机器上工作,但它无法加载到其他内存中。转出DLL动态链接到特定版本的CRT库(特定于msvcr120.dll)。因此,如果目标计算机没有安装相同版本的CRT库,则DLL将无法运行。

我尝试使用/ MT开关通过静态链接到CRT库来构建DLL,但是为托管代码启用CLR支持的开关与/ MT开关不兼容

我还试图通过使用NODEFAULTLIB开关完全删除CRT库的DLL并仅使用WINAPI调用。虽然我可以成功构建DLL的非托管部分而不依赖于CRT,但是当我包含托管porton并打开/ clr开关时,我收到以下错误:

eze_InstallScriptCA.obj:错误LNK2001:未解析的外部符号“?.cctor @@ $$ FYMXXZ”(?。cctor @@ $$ FYMXXZ) .NETFramework,Version = v4.0.AssemblyAttributes.obj:错误LNK2001:未解析的外部符号“?.cctor @@ $$ FYMXXZ”(?。cctor @@ $$ FYMXXZ)

任何人都建议如何创建一个独立于CRT版本的WIN32 DLL并在VC ++中启用CLR?

提前致谢

1 个答案:

答案 0 :(得分:0)

这是不可能的。

但是,您可以将msvcr120.dll与您的应用程序一起分发。