pinvoke

    8熱度

    6回答

    希望這是一個沒有腦子的簡單問題,但它表明我缺乏C++的專業知識。我是一名C#程序員,過去曾與其他人的C++/C dll一起完成了P/Invoke的大量工作。然而,這次我決定自己編寫一個包裝C++ dll(非託管),然後從C#調用我的包裝DLL。 我馬上遇到的問題是我無法定義可以通過p/invoke找到的C++函數。我不知道這個語法是什麼,但這裏是我試圖至今: extern bool __cdecl

    24熱度

    2回答

    在64位Windows上從64位應用程序中喚醒user32.dll是否是錯誤的?我已經多次成功完成了這個任務,並且從來沒有發生錯誤,但這似乎是矛盾的。我應該尋找user64.dll嗎?

    2熱度

    2回答

    我試圖使用DllImport屬性下面的代碼: [DllImport("grfinger.dll",EntryPoint="[email protected]")] public static extern int startenroll(int context); 讓我用DUMPBIN /導出函數名。當我運行代碼時,出現以下異常: Unable to find an entry point

    8熱度

    4回答

    什麼異常使用PInvoke時可能發生,或者是所有錯誤都由方法返回值處理,並且由開發人員在需要時檢查並引發異常?

    8熱度

    4回答

    我的C#代碼通過P/Invoke調用非託管第三方庫函數,而非託管函數有一些奇怪的副作用。我想調試它,看看它在做什麼。 如果我調試我的C#代碼,並嘗試「步入」P/Invoke調用,它會逐步完成。那裏並不令人意外 - 我預料到了;它沒有這個DLL的源代碼,我沒有告訴它看到反彙編視圖時沒問題。 因此,我將調試器切換到反彙編視圖(調試> Windows>反彙編)。現在我看到我的JITted代碼中的單個x8

    1熱度

    1回答

    我已經從另一個進程加載到內存中的非託管模塊成功讀取PE標頭。我現在想要做的是讀取模塊導出的名稱。基本上,這是我迄今爲止(我省略了大部分的PE解析代碼的,因爲我已經知道了它的工作原理): 擴展 public static IntPtr Increment(this IntPtr ptr, int amount) { return new IntPtr(ptr.ToInt64() + am

    4熱度

    4回答

    我有一個C API與簽名: int GetBuffer(char* buffer, int* maxSize) 在C,我會請這樣說: char buffer[4096]; int maxSize = 4096; GetBuffer(buffer, &maxSize); MAXSIZE設置到緩衝區大小,並填充實際大小設置。 我需要從C#調用它。我如何在「安全模式」下執行此操作?

    0熱度

    3回答

    我在我的項目中重寫了一個數字處理C#代碼的兩頁代碼,這些代碼在我的項目中使用了非託管C++,而完全優化後的代碼給出了3倍的加速。我想繼續優化該代碼,但現在我的選擇分析器dotTrace無法執行此操作,因爲它只查看託管代碼。 如何在C/C++應用程序中運行時調用P/Invoked C++模塊? 和切向的問題: 調用經由P /調用以下功能不產生任何不必要的開銷(如複製陣列),是嗎?只要確定。 (請注意

    0熱度

    3回答

    我從來沒有這樣做過,而且我對如何將數據類型轉換爲C#很困惑。這裏是function I'm trying to import: BOOL InternetSetOption( __in HINTERNET hInternet, __in DWORD dwOption, __in LPVOID lpBuffer, __in DWORD dwBufferLengt

    1熱度

    6回答

    以下是一個完整的程序。只要您不取消註釋頂部的「#define BROKEN」,它就可以正常工作。休息是由於PInvoke無法正確編組工會。所討論的INPUT_RECORD結構具有許多子結構,可能會根據EventType中的值使用這些子結構。 我不明白的是,當我只定義了KEY_EVENT_RECORD的單個子結構時,它與偏移量4處的顯式聲明一起工作。但是,當我在相同的偏移量處添加其他結構時,結構的內