我想出了一个引起头痛的问题。
首先让我描述一般的想法:
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()导入并调用它。我很确定这不是关于路径的。
提前致谢,
本
答案 0 :(得分:0)
不要讨厌,但我会说路径是问题。
无论如何,在.Net中包装DLL时还有另一个常见的错误...检查你的编译平台,是像Plugin.dll一样的Wrapper.dll 32bit / 64bit吗?
为避免混淆,请尽量不要使用“任何CPU”。