我有一个用ada编写的dll,我想用它在Unity项目中用C#。问题是我得到一个EntryPointNotFoundException错误。想要在Unity C#中使用Ada dll,但获取入口点未找到异常?
例如,ada代码包含一个函数Initialize_Test,它返回一个long。从我可以告诉它正确地出口这与C语言接口,并避免名称损坏:
pragma导出(C,Initialize_Test,“Initialize_Test”);
,然后在我的C#我有:
using UnityEngine;
using System.Collections;
using System.Runtime.InteropServices;
public class menuControl : MonoBehaviour {
[DllImport ("test_dll", EntryPoint="Initialize_Test")]
public static extern int Initialize_Test();
void Start() {
Debug.Log(Initialize_Test());
}
}
它得到尽可能Initialize_Test()下。根据http://www.mono-project.com/docs/advanced/pinvoke/#marshaling,这意味着它找到DLL(它被放置在插件文件夹中),但找不到函数“Initialize_Test”。
http://docs.go-mono.com/?link=T%3aSystem.TypeLoadException有什么可能导致这种情况的建议,但没有一个看起来像他们在这里适用。我认为唯一需要做的就是用dumpbin.exe获取重名的名称,但我觉得应该有一个正确的方法来做到这一点。
编译dll的人向我保证,其他人已经成功地使用它,但他们都没有使用Unity,更不用说C#。恐怕Ada只是让它不兼容,我在Unity的文档中看到了一点,这表明它不能接受某些编译器生成的本地代码。
2015-05-19
pdonk
+0
中级步骤:做一个简单的C程序调用Initialize_Test工作吗?你可以从C编写的DLL中调用函数吗?这些可能表明哪一端有问题。 –
+0
我写了一个非常简单的dll,只包含extern“C”int DllExport Initialize_Test(){return 5; },我可以从C#中调用它,没有任何问题。 –