0

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

我尝试了以下代码,但它不起作用。.NET 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()));
    }
}
4

1 回答 1

1

.NET 数组与原始指针不兼容。您需要使用IntPtr或将目标缓冲区传递给函数:

void __stdcall FST_LibraryVersion(char *dest)
{
    strcpy(dest, LIBRARY_VERSION);
}

显然,您需要包括检查以防止缓冲区溢出。

另请参阅返回 char * 的 C 函数的 PInvoke

于 2013-07-24T16:31:02.457 回答