在C#dll中使用Platform Invoke

时间:2014-01-29 12:59:31

标签: c# c++ .net dll

我想出了一个引起头痛的问题。

首先让我描述一般的想法:

1)我得到了一些本机c ++代码,我编写了一个包装器,可通过Platform Invoke访问。结果是,让我们说wrapped.dll。

2)我有一个包含应用程序,app.exe和类库的c#项目,让它成为plugin.dll。

3)我想在我的plugin.dll中导入Wrapped.dll

总的来说。

现在出现问题:

我的想法是在c#

中使用Pinvoke导入wrapped.dll
[DLLImport("Wrapped.dll", CallingConvention = CallingConvention.Cdecl)]
private static extern void someFunction();

导入工作正常,只要我在c#application main()中执行。但我的想法是从我的plugin.dll访问它。出于某种原因,这不起作用,我得到一个例外:

System.DLLnotFoundException in Plugin.dll

它与wrapped.dll的路径无关。我尝试了pluging.dll的标准\ bin文件夹,应用程序,both和absolut路径(例如" C. \ User \ Projects \")。

我现在要问的是:

平台只能在应用程序中调用吗?是否有一些额外的步骤可以在dll中访问它?

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

提前致谢,

1 个答案:

答案 0 :(得分:0)

不要讨厌,但我会说路径是问题。

无论如何,在.Net中包装DLL时还有另一个常见的错误...检查你的编译平台,是像Plugin.dll一样的Wrapper.dll 32bit / 64bit吗?

为避免混淆,请尽量不要使用“任何CPU”。