【发布时间】:2014-07-17 18:16:05
【问题描述】:
我一直在到处搜索,但找不到如何做到这一点:
我正在尝试在我的 c# 代码中使用非托管 dll。使用dependancy walker,我发现我还需要包含kernel32.dll、msvcp120d.dll和msvcr120d.dll的导入。目前我只像这样调用我的 dll
[DllImport("ExApcpp.dll", CallingConvention = CallingConvention.Cdecl)]
public extern static string cb_organise_i (int a1);
(其中 cb_organise_i 是 dll 中的一个函数。)
我正在使用 xamarin 并不断收到错误
[Mono] Probing '_monodroid_gref_log_delete'.
[Mono] Found as '_monodroid_gref_log_delete'.
[Mono] DllImport attempting to load: 'ExApcpp.dll'.
[Mono] DllImport error loading library './libExApcpp.dll': 'dlopen failed: library "/data/data/workex.workex/lib/./libExApcpp.dll" not found'.
[Mono] DllImport error loading library './libExApcpp.dll.so': 'dlopen failed: library "/data/data/workex.workex/lib/./libExApcpp.dll.so" not found'.
[Mono] DllImport error loading library 'libExApcpp.dll': 'dlopen failed: library "/data/data/workex.workex/lib/libExApcpp.dll" not found'.
虽然我的 dll 在应用程序文件夹中。另外我没有名为 libExApcpp.dll 的文件(我使用 swig 和 vs2013 来包装我的 c++ 代码并制作 dll)
假设我需要其他三个 dll,我是否在正确的路线上,如果需要,我将如何包含/实现它们?
对不起,如果这是一个愚蠢的问题,但我已经对答案视而不见。
【问题讨论】:
-
旁注:对于非 Windows 平台(这似乎是您基于 Xamarin 标记的目标),调用本机代码根本不可能工作。还取决于运行时的“D”(调试)版本不是一个好主意...
-
kender32?确定不是 kernel32 吗?
-
是的,我的坏@MSalters
-
为什么要链接到运行时的调试版本?你的问题不是你没有导入足够的函数,而是你的 DLL 没有加载。