参考:
目录
参考一:
【转载】Unity3d引用外部的dll - 程序员大本营 (pianshen.com)
一开始提示,dll找不到;
(用c++写的)
一开始以为是位置放错了,仔细看了一下,原来要64位编译
!!仔细看报错还是很重要的!!
虽然很多提示都不知所云,也只能通过一些线索分析和试错排查
什么位置放错,dllimport不要写.dll这些屁话就不要发布到网上了,一般不是这种问题造成的
小学生写个作文会离题万丈,但是做个原型填空,还是不会填错的
另外的一个dll,提示,dll找不到
(c#写的,shi 是真找不到)
第一个C语言代码
#include <algorithm>
#define DLLExport __declspec(dllexport)
extern "C"
{
DLLExport int GetMaxNumber(int x, int y)
{
return std::max(x, y);
}
}
C语言函数作为函数参数
在C#中调用UnmanagedFunctionPointer以获得自定义调用约定 - 程序园 (voidcn.com)
c#里需要写的代码
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
public delegate void Func(string userStr);
c语言
extern "C" __declspec(dllexport) int __stdcall callUsercallFunction(int functionPointer, int arg1 )
{
int retVal;
_asm
{
mov esi, arg1
call functionPointer
mov retVal, eax
}
//Fake returning al, the lower byte of eax
return retVal & 0x000000FF;
}
VS x64平台不支持内联汇编
VS2010 X64汇编(使用了非标准扩展: 不支持在此结构上使用“_asm”关键字解决方法)_日月忽其不淹兮,春与秋其代序 认知即成长-CSDN博客
No Entrance - 没有入口
这个也好理解,就是要写公布dllExport
Dll占用
就是调用了dll内部的方法,占用内存了,就不能删除这个.dll,必须整个Editor关掉(360粉碎也没有用),侧面证明了dll确实被调用成功
要找到根本占用原因,也要看看有没办法,调用Dll,而不占用,可以快速替换
扩展阅读:
关于C语言调用Unity3d C#函数的方法_nature19862001的专栏-CSDN博客