![](/img/trans.png)
[英]Marshalling "EGLRenderResolutionScaleProperty" to ANGLE from C# using P/Invoke
[英]invoke C function from C# using P/Invoke
我有一個C函數,它是VS 2010項目的一部分,並具有以下簽名:
real_T wrapper(void)
哪里
typedef double real_T;
在我的C#代碼中,我嘗試這樣做:
[DllImport(@"C:\Users\bla\Documents\Visual Studio 2010\Projects\bla\bla\Debug\bladibla.dll")]
public static extern double wrapper();
static void Main(string[] args)
{
wrapper();
}
但得到:
無法在DLL'C:\\ Users \\ bla \\ Documents \\ Visual Studio 2010 \\ Projects \\ bla \\ bla \\ Debug \\ bladibla.dll'中找到名為'wrapper'的入口點。
dll肯定在那里。 還有什么可能是錯的?
可能該函數正在以錯誤的名稱導出。 你可以像這樣壓制破壞:
extern "C" {
real_T wrapper(void);
}
您顯然也沒有導出該功能。 這樣做的簡單方法是這樣的:
extern "C" {
__declspec(dllexport) real_T wrapper(void);
}
如果仍然無法解決丟失的導出,請使用Dependency Walker之類的工具檢查該函數是否實際上正在導出,如果是,則以什么名稱導出。
最后,您應該將C#端的調用約定聲明為cdecl,以匹配本機函數的調用約定。
[DllImport(@"...", CallingConvention=CallingConvention.Cdecl)]
public static extern double wrapper();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.