使用外部c++;Unity3D 5中的dll 我写了一个C++ DLL,我想用在UnyD3D中。我将它放入资产/插件中,并编写了一个C#脚本,该脚本应该可以访问它的一个功能,但我得到了以下错误:
EntryPointNotFoundException:乘法使用外部c++;Unity3D 5中的dll 我写了一个C++ DLL,我想用在UnyD3D中。我将它放入资产/插件中,并编写了一个C#脚本,该脚本应该可以访问它的一个功能,但我得到了以下错误:,c#,c++,dll,unity3d,C#,C++,Dll,Unity3d,EntryPointNotFoundException:乘法 test.Start()(位于Assets/Scripts/test.cs:11) 经理h: extern "C" { class Manager { public: __declspec(dllexport) float Multiply(float a, float b); }; } Manager.cpp: #include "Manager.h" extern "C" {
test.Start()(位于Assets/Scripts/test.cs:11)
经理h:
extern "C"
{
class Manager
{
public:
__declspec(dllexport) float Multiply(float a, float b);
};
}
Manager.cpp:
#include "Manager.h"
extern "C"
{
float Manager::Multiply(float a, float b)
{
return a * b;
}
}
C#脚本:
编辑:这在我使用类时不起作用。要使用一个类,你必须像做一件小事一样去做,为什么你要做一个你想做的函数?而且,
乘法
函数在一个类中,并且声明为公共
,所以这不需要管理器
对象的对象实例吗?(也许可以尝试遵循教程中的约定,如或)你是对的,“类管理器”是问题所在。有没有一种方法可以在类中使用它?类和DLL真的很棘手。大多数人在处理DLL边界时使用“ExtEngCc”的原因是编译器在C++函数/类上执行“名称修改”,并且它与编译器到编译器以及版本在同一编译器中的版本不一致。对于一些实现选项,请检查一下:在C语言中,需要创建一个表示Manager类的结构,而C++中需要提供一个C包装器API;可用于实例化C++管理器实例并在管理器实例上调用多个函数的函数。然后在C语言中,DLLImport使用C包装器API,使用C的结构作为管理器作为C语言到C++的瞬态对象。
[DllImport("Manager", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Unicode)]
private static extern float Multiply(float a, float b);
void Start()
{
Debug.Log(Multiply(10, 2));
}