Pinvokeでi8タイプとしてマーシャルする方法は?
-
28-10-2019 - |
質問
Interoperservicesを使用して外部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));
i8タイプとしてオブジェクト値「myvalue」に渡したいです。
これはどうすればいいですか?
解決
パラメーター宣言でそれを指定する必要があります。 [MarshalAs(UnmanagedType.I8)]
他のヒント
UnmanagedTypeはenumであるため、enum.parseメソッドを試すことができます。
string value = "9";
UnmanagedType i8 = (UnmanagedType)Enum.Parse(typeof(UnmanagedType), value);
これがあなたに役立つことを願っています。
所属していません StackOverflow