p/invoke 如何仅使用 C++ 调用函数但需要 .a/.lib/.o 文件?
How p/invoke call function using only but C++ need the .a/.lib/.o files?
.NET 的 P/invoke 如何仅使用 dll 文件调用 DLL 中的函数,但对于 C++,如果没有 .a/.lib
/.o
就无法做到这一点文件?
背景:
我正在尝试使用来自 C++/CLI 应用程序的 C++ 中的 dll "written" 中的函数,但我已经告诉我只有 dll 文件加上 header 是不够的我也需要 .a/.lib
/.o
文件。如何使用 minGw 和 C++/CLI 编译此 dll 不支持 .a
文件,但仅支持 .lib
s 我将不得不使用 MSVC compiler/linker 重新编译此 dll。所以我想知道为什么 C# 中的这个 "simple" 有效:
[DllImport("foo.dll",
CallingConvention = CallingConvention.Cdecl,
EntryPoint="_Z9getNumberv")]
public static extern int GetNumber();
但是 C++ 中的 dll 和用于 C++ 的 dll 需要更多 work/need 到文件。我是初学者,所以我可能遗漏了一些东西。
您可以 在 C++ 中使用 GetProcAddress
并直接调用它。这类似于 P/Invoke 所做的。
导入库的使用是为了使标准链接器能够工作(而P/Invoke和GetProcAddress
绕过链接器)。
.NET 的 P/invoke 如何仅使用 dll 文件调用 DLL 中的函数,但对于 C++,如果没有 .a/.lib
/.o
就无法做到这一点文件?
背景:
我正在尝试使用来自 C++/CLI 应用程序的 C++ 中的 dll "written" 中的函数,但我已经告诉我只有 dll 文件加上 header 是不够的我也需要 .a/.lib
/.o
文件。如何使用 minGw 和 C++/CLI 编译此 dll 不支持 .a
文件,但仅支持 .lib
s 我将不得不使用 MSVC compiler/linker 重新编译此 dll。所以我想知道为什么 C# 中的这个 "simple" 有效:
[DllImport("foo.dll",
CallingConvention = CallingConvention.Cdecl,
EntryPoint="_Z9getNumberv")]
public static extern int GetNumber();
但是 C++ 中的 dll 和用于 C++ 的 dll 需要更多 work/need 到文件。我是初学者,所以我可能遗漏了一些东西。
您可以 在 C++ 中使用 GetProcAddress
并直接调用它。这类似于 P/Invoke 所做的。
导入库的使用是为了使标准链接器能够工作(而P/Invoke和GetProcAddress
绕过链接器)。