C# 呼叫C++;NET中的方法
我有一个第三方应用程序的dll,通常通过命名管道与之通信。但NPs只有在另一个应用程序启动时才起作用。我可以直接从dll调用一个方法来查看它的版本吗 C++VS2012C# 呼叫C++;NET中的方法,c#,.net,interop,C#,.net,Interop,我有一个第三方应用程序的dll,通常通过命名管道与之通信。但NPs只有在另一个应用程序启动时才起作用。我可以直接从dll调用一个方法来查看它的版本吗 C++VS2012 #ifdef MTFST_EXPORTS #define MTFST_API __declspec(dllexport) #else #define MTFST_API __declspec(dllimport) #endif #define LIBRARY_VERSION "3.0" .... usi
#ifdef MTFST_EXPORTS
#define MTFST_API __declspec(dllexport)
#else
#define MTFST_API __declspec(dllimport)
#endif
#define LIBRARY_VERSION "3.0"
....
using namespace std;
MTFST_API char *__stdcall FST_LibraryVersion()
{
return LIBRARY_VERSION;
}
我尝试了以下代码,但不起作用。净4
internal class Program
{
[DllImport("Library.dll")]
private static extern char[] FST_LibraryVersion();
private static void Main(string[] args)
{
Console.WriteLine(new string(FST_LibraryVersion()));
}
}
.NET数组与原始指针不兼容。您需要使用
IntPtr
或将目标缓冲区传递给函数:
void __stdcall FST_LibraryVersion(char *dest)
{
strcpy(dest, LIBRARY_VERSION);
}
显然,您需要包括防止缓冲区溢出的检查
另外,请参见尝试使用编译模式“Any CPU”,而不是X86或64,或者使用X86.NET代码编译为AnyCPU。C++ LIB是x86。C++函数返回<代码> ItpTrt/COD>,而不是<代码> char []/COD>。见: