Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 呼叫C++;NET中的方法_C#_.net_Interop - Fatal编程技术网

C# 呼叫C++;NET中的方法

C# 呼叫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

我有一个第三方应用程序的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"

    ....

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>。见: