使用平台在C#DLL中调用

Using Platform Invoke in a C# dll

本文关键字:调用 C#DLL 平台      更新时间:2023-10-16

我提出了引起头痛的问题。

让我首先描述一个总体想法:

1)我得到了一些本机C 代码,我为此写了一个包装器,以使通过平台Invoke访问。结果是,让我们说包装。dll。

2)我得到了一个包含应用程序,app.exe和class库的C#项目,让它为plugin.dll。

3)我想在插件中导入包装。dll

一般来说。

现在问题:

这个想法正在导入包装。dll,使用c#

中的pinvoke
[DLLImport("Wrapped.dll", CallingConvention = CallingConvention.Cdecl)]
private static extern void someFunction();

该导入效果很好,只要我在我的C#应用程序main()中进行操作。但是,这个想法是从我的plugin.dll访问它。由于某种原因,这不起作用,我得到一个例外:

System.DLLnotFoundException in Plugin.dll

这与包装的路径无关。我尝试了pluging.dll的标准 bin文件夹,应用程序和绝对路径(例如" C. user projects ")。

我现在要问的是:

仅在应用程序中调用一个平台?是否有一些额外的步骤可以使其在DLL中访问?

请注意,这与我的wrapper.dll无关。我可以从我的应用程序main()导入并调用它。我很确定这与路径无关。

预先感谢

ben

不要烦人,但我想说的是问题。

无论如何,包装DLL在.NET中的另一个常见错误...检查您的编译平台,wrapper.dll 32bit/64bit(例如plugin.dll)吗?

为了避免混乱,请不要使用"任何CPU"。