gpt4 book ai didi

c# - 无法在Unity 5中执行extern c函数

转载 作者:行者123 更新时间:2023-12-02 10:39:16 26 4
gpt4 key购买 nike

目前,我正在尝试将CEF嵌入Unity。我已经成功将cefsimple示例编译为dll,并通过以下代码使用DllImport在普通控制台应用程序中使用它:

[DllImport("cefsimple")]
public static extern ulong StartCustom();
static void Main(string[] args)
{
StartCustom();
}

和相应的C函数:
extern "C" __declspec (dllexport) int StartCustom() {
return wWinMain(nullptr, nullptr, nullptr, 0);
}

(我已将所有必需的文件移至创建了.exe文件的文件夹中)

但是如果我尝试在Unity中做同样的事情
Failed to load 'Assets/Plugins/cefsimple.dll' with error 'The specified procedure could not be found.

DllNotFoundException: cefsimple
Launcher.Init () (at Assets/Plugins/Launcher.cs:13)

有什么办法可以解决这个问题?

最佳答案

首先,您最需要在c应用程序中定义dll导入和导出指令,如下所示:

#ifndef YOUR_SOURCE_NAME_H //header guard
#define YOUR_SOURCE_NAME_H

#define YOUR_SOURCE_NAME_EXPORT (1)

#ifdef YOUR_SOURCE_NAME_EXPORT
#define DLL_USAGE_MODE extern "C" __declspec(dllexport) // export DLL information
#else
#define DLL_USAGE_MODE extern "C" __declspec(dllimport) // import DLL information
#endif


#endif // YOUR_SOURCE_NAME_H

您通常将DLL_USAGE_MODE放在函数名称之前,以使其可从外部访问。
例如,您的c DLL中具有以下功能:
DLL_USAGE_MODE int saySomthing(const char* pText) {
printf("\n%s", pText);
return 0;
}

现在在您的C#应用​​程序中:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Runtime.InteropServices;

class Program {
[DllImport("address_of_your_dll.dll", EntryPoint = "saySomthing", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
internal static extern int saySomthing(string text);

static void Main(string[] args) {
saySomthing("HelloWorld !!");
}
}

关于c# - 无法在Unity 5中执行extern c函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52387043/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com