2015-06-30 29 views
1

我想創建一個簡單的Win32 DLL,它包含一個函數,該函數將返回給定進程/應用程序的名稱,應用程序的主窗口ID列表窗口。最有效的方法是利用託管代碼Process.GetProcessesByName()方法。但是,雖然生成的DLL在某些機器上工作,但未能在其他機器中加載到內存中。轉出的動態鏈接庫是動態鏈接到特定版本的CRT庫(具體是msvcr120.dll)。所以如果目標機器沒有安裝相同版本的CRT庫,該DLL將無法工作。在VC++中創建一個啓用了CLR但沒有CRT的Win32 dll

我曾嘗試通過靜態鏈接到使用/ MT開關,但開關以啓用託管代碼CLR支撐CRT庫來構建DLL與/ MT開關

我還試圖不相容通過使用NODEFAULTLIB開關徹底清除CRT庫的DLL,並使用WINAPI調用。雖然我可以在不依賴CRT的情況下成功構建DLL的非託管部分,但是當我包含託管porton並打開/ clr開關時,出現以下錯誤:

eze_InstallScriptCA.obj:error LNK2001:無法解析的外部符號「?.cctor @@ $$ FYMXXZ」(?.cctor @@ $$ FYMXXZ) .NETFramework,Version = v4.0.AssemblyAttributes.obj:error LNK2001:無法解析的外部符號「?.cctor @ @ $$ FYMXXZ「(?.cctor @@ $$ FYMXXZ)

任何人都有建議如何創建一個獨立於CRT的版本的WIN32 DLL,並且在VC++中啓用了CLR?

在此先感謝

回答

0

這是不可能的。

但是,您可以將msvcr120.dll與您的應用程序一起分發。

相關問題