[c#]从 dll 调用本机方法

标签: dll C#
发布时间: 2013/12/3 6:29:22
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我想使用 MimeTex.dll 在混合模式下的 C+ + / CLI 项目。包括由 dll:#pragma comment(lib,"MimeTex.dll")

和我试图调用此方法:CreateGifFromEq("expression","path");

但是,编译器告知它不知道 CreateGifFromEq() 方法。

在如何使用网站中找不到资源 MimeTex.dll c + + 中。我只是发现如何使用它与 C# 中由像 Pinvok此链接

[System.Security.SuppressUnmanagedCodeSecurity()]
internal class NativeMethods
{
    private NativeMethods()
    { //all methods in this class would be static
    }

    [System.Runtime.InteropServices.DllImport("MimeTex.dll")]
    internal static extern int CreateGifFromEq(string expr, string fileName);

    [System.Runtime.InteropServices.DllImport("kernel32.dll")]
    internal extern static IntPtr GetModuleHandle(string lpModuleName);

    [System.Runtime.InteropServices.DllImport("kernel32.dll")]
    [return: System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.Bool)]
    internal extern static bool FreeLibrary(IntPtr hLibModule);
}

然后调用它像:

NativeMethods.CreateGifFromEq(equation, tempGifFilePath);

怎么我可以称之为无 Pinvok 在混合模式下的 C + + / CLI 吗?

解决方法 1:

一定要书写:

#pragma comment(lib,"MimeTex.lib")

换句话说,你将.lib 文件传递给链接器,而不是.dll 文件。当你编译 DLL 时,将生成一个.lib 文件。

但这不是立即解决问题。编译器有没有声明为 CreateGifFromEq 。那是因为你没有列入您的 c + + 代码库的头文件。这样做应该解决的问题。

如果所有您需要是,一个函数然后它应该是微不足道的以在您的 c + + 代码中声明它。

__declspec(dllimport) extern int CreateGifFromEq(char *expr, char *fileName);

您可能会需要换行,在 extern "C" 块太。

实际上,有看了看图书馆,与源提供的头文件没有声明该函数,即使它是在库中存在。

赞助商