0

C++ dll 使用 Win32 从串行端口读取数据并将数据写入串行端口。我需要在我的 C# 应用程序中使用该数据。它只是像我用 C# 编写的任何其他 dll 那样引用 dll 的一种情况,导入它然后调用其中的方法吗?还是我需要做一些不同的事情?

4

2 回答 2

1

如果此 DLL 不是 COM 库,则需要使用PInvoke

基本上,DLL 导出的每个函数都需要使用所需的语法进行定义。这是从 wininet.dll 访问函数 InternetGetConnectedState 所需的声明示例

[DllImport("wininet.dll")]
private extern static bool InternetGetConnectedState( out int Description, int ReservedValue ) ;

在声明之后,您可以通过这种方式从您的 C# 代码中调用该函数

public static bool IsConnectedToInternet( )
{
    try
    {
        int Desc;
        return InternetGetConnectedState(out Desc, 0);
    }
    catch 
    {
        return false;
    }
}

当然,您的 DLL 应该从您的应用程序中可见(相同的文件夹或路径)

于 2012-04-12T21:23:28.730 回答
1

您正在寻找的搜索词是 PInvoke。

本质上,您需要在 C# 类中声明引用外部 C++ 实现的方法。

像这样的东西(来自MSDN 示例):

class PlatformInvokeTest
{
    [DllImport("msvcrt.dll")]
    public static extern int puts(string c);
    [DllImport("msvcrt.dll")]
    internal static extern int _flushall();

    public static void Main() 
    {
        puts("Test");
        _flushall();
    }
}
于 2012-04-12T21:24:27.250 回答