簡體   English   中英

.NET COM互操作方法簽名

[英].NET COM Interop Method Signature

您將使用什么互操作簽名用於以下COM方法? 我特別感興趣的是最后兩個參數,以及是否嘗試使用MarshalAsSizeParamIndex

HRESULT GetOutputSetting(
  DWORD    dwOutputNum,
  LPCWSTR  pszName,
  WMT_ATTR_DATATYPE*  pType,
  BYTE*    pValue,
  WORD*    pcbLength
);

文件說明:

pValue [out]指向包含該值的字節緩沖區的指針。 傳遞NULL以檢索所需緩沖區的長度。

pcbLength [in,out]輸入時,指向包含pValue長度的變量的指針。 在輸出時,變量包含使用的pValue中的字節數。

您可以嘗試PInvoke簽名工具包 在執行平台互操作時正確編組是非常有用的。 它很可能不會涵蓋您的特定問題,但您可能會找到一個類似的問題,為您提供所尋求的信息。

我會使用SizeParamIndex,因為您的場景正是此功能的用途:指定變量大小的數組的長度。

所以參數的最后一個是C#簽名:

byte[] pValue,
ref ushort pcbLength

在沒有ref的情況下傳遞byte-Array,因為該數組對應於本機代碼中的指針。 如果為pValue傳遞NULL(或在C#中為null),以便檢索所需緩沖區的大小。 這也意味着調用者必須分配字節數組。 參數pcbLength由ref傳遞,因為它用作輸入/輸出參數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM