2011-05-13 109 views
13

我有一個用C#編寫的.net程序集,我正在從程序集中導出本地C函數。從.net DLL導出本地C函數?

我有一個應用程序將執行一個'LoadLibrary()'任何DLL的'插件'文件夾中找到。加載DLL後,應用程序執行一個'GetProcAddress'查找名爲'Register'的函數。應用程序希望此函數遵循C調用約定。

如何從我的.net程序集中導出名爲'Register'的函數,以便我可以成功地與此應用程序的插件系統進行連接?

感謝, 安德魯

回答

9

使用this tool

+0

看起來像它會工作,謝謝! – Andrew 2011-05-13 15:08:24

+0

這是什麼工具。我的網絡上的鏈接被阻止。 – CathalMF 2014-03-03 15:42:09

+1

@CathalMF:https://www.nuget.org/packages/UnmanagedExports – SLaks 2014-03-03 16:19:58

0

你想要的是一個Reverse P/Invoke。你實際上不能將C函數嵌入到C#dll中,如果你的意思是一個在C中實際實現的函數,但通過遵循在鏈接頁面上給出的教程,你可以創建一個可由非託管C/C++代碼調用的DLL導出。

+0

這些答案都不符合他的需求;他沒有使用COM。 – SLaks 2011-05-13 14:56:54

1

在Managed C++中編寫一個.Net庫,您可以導出一個「Native」方法/函數。

+0

它是可行的,但混合模式C++ SUCKS! – dmihailescu 2011-07-07 16:20:21

1

不幸的是微軟不支持這個功能,並且你必須在構建之後更改msil來公開這些方法。 這是可能的,因爲一個人已經在codeprojecthere, 上顯示出合理的解決方案 ,但它需要一個後期構建步驟,並且在此之後您自己。 我不知道這個黑客是否可以在.net 4.0或更高版本上運行。 希望微軟會傾聽我們的意見並支持C#中的這個簡單功能,因爲CLR支持已經存在。