Как сделать маршалл как тип I8 с помощью PInvoke? - PullRequest
2 голосов
/ 20 февраля 2012

У меня есть значение UInt32, которое я хочу передать на внешнюю DLL, используя InterOpServices.

Прототип для неуправляемого кода:

[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.

Как это можно сделать?

Ответы [ 2 ]

6 голосов
/ 20 февраля 2012

Необходимо указать это в объявлении параметра: [MarshalAs(UnmanagedType.I8)]

1 голос
/ 21 февраля 2012

UnmanagedType - это перечисление, поэтому вы можете попробовать метод Enum.Parse:

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

Надеюсь, что это полезно для вас.

...