pinvoke

    -1熱度

    1回答

    我有一個方法,該方法產生P /動態調用函數: member private this.MakePInvokeMethod(dllName:string, entryName:string, callingConvention:CallingConventions, returnType:Type, parameterTypes:Type[],

    1熱度

    1回答

    我試圖映射C結構的C#與它的工作在一個包裝類,但保持對結構運行到一個TypeLoadException,因爲它: 包含對象場在偏移量2錯誤地對齊或被非對象字段重疊。 下面是相關的C代碼: #pragma pack(2) tyedef unsigned char SPECIAL_ID[16]; typedef struct _idType { unsigned char f;

    0熱度

    1回答

    我有一個控制檯應用程序,使用User32.dll方法導入將鼠標移動到所需的位置。 [DllImport("user32.dll")] static extern void mouse_event(int dwFlags, int dx, int dy, int dwData, int dwExtraInfo); [Flags] public enum MouseEventFlags {

    1熱度

    1回答

    我有一個本機的結構: typedef struct { char Message[STR_MAX]; char Params[10][STR_MAX]; int GetParamStr[10]; int ParamCount; } FormattedMessage_t; 和回調類型: typedef void(*FormatMsgCB_t)(Form

    1熱度

    1回答

    我正在將一個delphi應用程序轉換爲C#。有一堆打包的記錄,根據我幾周前問過的類似問題,最好轉換爲類。但是,我被告知需要將它們轉換爲結構體,我可以使用一些幫助。我將使用BinaryReader從文件中讀取值並將值分配給結構中的字段。 *請注意,我正在閱讀的文件是使用Delphi和打包的記錄製作的。 下面是一個例子結構: 德爾福: Testrec = packed record now:

    0熱度

    3回答

    我從C#方法調用C庫函數;像這樣: [DllImport("libfoo.dll")] public static extern int GetData(StringBuilder buffer); 它返回它放入緩衝區的字符數,並且有一個已知的字符數最大限制;因此它可以被稱爲等: StringBuilder sb = new StringBuilder(5000); int receiv

    0熱度

    1回答

    我正在使用來自第三方供應商的C API DLL。我的問題是,我似乎無法找到編組下面的C代碼的好模板: API_Open(void ** handle); API_Close(void * handle); 的呼聲被簡化,但手柄是一個void *,這是(在C)通過進入API_Open調用爲&的句柄,然後作爲句柄傳入API_Close。 我試過在C#中做同樣的事情,但不知道如何正確處理元帥。我的

    0熱度

    1回答

    我在使用P/Invoke從C#代碼中使用C++函數時遇到問題。我使用http://www.codeproject.com/Articles/403285/P-Invoke-Tutorial-Basics-Part上的教程作爲基本的例子,一旦我得到了它的工作,我適應了我自己的代碼。 這是產生一個System.AccessViolationException,並附加信息:'試圖讀取或寫入受保護的內存。

    0熱度

    1回答

    我發現許多方式從byte[]得到一個IntPtr的,所有這些我能成功地傳遞到外部非託管代碼得到一個非零IntPtr的,但只有如果我在堆棧上分配byte[]。試圖在byte[]實例變量上做同樣的事情,我得到了一個null(IntPtr.Zero)的結果,無論採用哪種方法獲得我選擇的IntPtr。在這種情況下,我還沒有發現任何關於實例變量是否與堆棧中分配的值不同的信息。 這裏是我想用它來獲取有效的In

    3熱度

    2回答

    我知道這可以通過mallocing在C中完成,將malloced指針傳遞給參數類型爲IntPtr的委託,編組爲string [],然後用託管代碼中單獨的,導出的C函數釋放malloced內存。 我的問題是:這可以做到更簡單的方式嗎?例如。 : C#委託參數的類型是string []? 沒有獨立的自由功能從託管代碼中調用 編輯:用C [UnmanagedFunctionPointer(Calling