0

次の関数がエクスポートされている C++ DLL があります。

double getDouble(std::wstring filename, std::string ID, status &stCode);

int getInt(std::wstring filename, std::string ID, status &stCode);

float getFloat(std::wstring filename, std::string ID, status &stCode);

string getString(std::wstring filename, std::string ID, status &stCode);

int* getIntArray(std::wstring filename, std::string ID, status &stCode);

float* getFloatArray(std::wstring filename, std::string ID, status &stCode);

string* getStringArray(std::wstring filename, std::string ID, status &stCode);

ステータスは列挙型です...

今、私は自分の C#.NET アプリでこの DLL を使用したいと考えています... C# で尊敬されるメソッドを宣言し、このメソッドを呼び出す方法を教えてください.... よろしくお願いします...

4

2 に答える 2

0
    [DllImport("external.dll", SetLastError = true, CallingConvention = CallingConvention.Cdecl)]
    public static extern MbStatus queue_accept(
        int reader,
        [MarshalAs(UnmanagedType.LPStr)] string status);

DllImport属性のパラメーターを検索します。DLLによっては、調整が必要になる場合があります。

補足:私は通常、外部dllをインターフェイスとコードレイヤーでラップして、テスト用に分離し、依存性注入を使用してロードします。また、命名規則は変更しません。

public interface IExternalDllInterop
{
    MB_STATUS queue_accept(int reader, string status);
}

public class AmbInterop : IAmbInterop
{
    public MbStatus queue_accept(int reader, string status)
    {
        return StaticAmbInterop.mb_queue_accept(reader, message, status);
    }
}
于 2012-06-29T05:56:41.937 に答える