Unity_记一次dll引入_Import和方法调用以及dll找不到不存在排查

Posted avi9111

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unity_记一次dll引入_Import和方法调用以及dll找不到不存在排查相关的知识,希望对你有一定的参考价值。

参考:

目录

一开始提示,dll找不到;

另外的一个dll,提示,dll找不到

第一个C语言

C语言函数作为函数参数

No Entrance - 没有入口

Dll占用

扩展阅读:


参考一:

【转载】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博客

 

以上是关于Unity_记一次dll引入_Import和方法调用以及dll找不到不存在排查的主要内容,如果未能解决你的问题,请参考以下文章

unity再记一次shader渲染性能工具

Unity记一次Profiler补捉到的粒子性能优化

没有unity_无聊记一次BPM_ETL_DataPipline的入门

记一次脚本引用django环境

记一次PLC和脉冲型伺服电机的接线方法_20210915

记一次python沙箱逃逸绕过(time based rce)