6
我想用COM接口使用第三方庫。 A C++示例應用程序被提供,它使用聲明爲一個函數:爲什麼導入的類型庫函數與原始源不同?
HRESULT __stdcall IMyInterface::DoSomething (BSTR id, long State)
導入類型庫後,將所得Delphi代碼是:
procedure DoSomething (const id: WideString; State: Integer); safecall;
在C++示例應用程序,結果( HRESULT)用於確定函數是否正確執行。
爲什麼德爾福把這個聲明轉換成一個過程,以至於我無法得到結果呢?
我能做些什麼來解決這個問題?
有時候我發現Delphi生成的tlb是錯誤的。我最終手動編輯生成的tlb文件。嘗試將程序更改爲函數並查看它是否有效。 – Hendra
你不需要檢查它,當結果的高位被設置時,Delphi會拋出異常,這就是爲什麼該過程被聲明爲'safecall'。看到[這個問題](http://stackoverflow.com/questions/96042/whats-safecall)和答案。 –
再次想到,嘗試使用-Pt-選項(-Pt-將HRESULT映射到所有接口(-T)上的safecall)從命令提示符運行tlibimp。 – Hendra