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 に答える