2

InterOpServicesを使用して外部dllに渡したいUInt32値があります。

アンマネージコードのプロトタイプは次のとおりです。

[DllImport("svr.dll")]
public static extern UInt32  CreateTag (
    [MarshalAs(UnmanagedType.LPStr)] String Name,
    Object Value,
    UInt16 InitialQuality,
    bool IsWritable);

呼び出しコードは次のとおりです。

int myValue = Convert.ToInt32(item); //How to marshal as I8 type
tagNumber = (UInt32)svr_DLL.CreateTag(
    DeviceName + "." + el.tagName,
    myValue, // <-- this argument
    192,
    Convert.ToBoolean(el.tagEditable));

オブジェクト値「myValue」にI8タイプとして渡したい。

これはどのように行うことができますか?

4

2 に答える 2

6

パラメータ宣言で次のように指定する必要があります。[MarshalAs(UnmanagedType.I8)]

于 2012-02-20T18:09:08.747 に答える
1

UnmanagedTypeは列挙型であるため、Enum.Parseメソッドを試すことができます。

string value = "9";
UnmanagedType i8 = (UnmanagedType)Enum.Parse(typeof(UnmanagedType), value);

これがお役に立てば幸いです。

于 2012-02-21T05:12:22.877 に答える