有沒有人曾經使用過delphi 去call .net c#寫的.dll?? |
答題得分者是:sryang
|
jimmy_wei
高階會員 發表:9 回覆:176 積分:147 註冊:2003-08-28 發送簡訊給我 |
|
jimmy_wei
高階會員 發表:9 回覆:176 積分:147 註冊:2003-08-28 發送簡訊給我 |
我想或許是我之前的問題講不清楚,在此補充說明,
我的delphi版本是5,不過我試過7的也不行,用,
stdcall及cdecl兩個方法我也都試過了,它compiler會出現
"應用程式出始值(0xc000007b)失敗"然後就是出現
"access violation at 0x77f83941: write of address 0x00000010"
process stop.
用上面兩個版本,怎麼run都是出現這個該死的訊息耶,
我是不是漏了什麼沒做呀??
請大家關心一下喔,謝謝,就算不確定給我個方向也可以,我
會自己去try的..
|
sryang
尊榮會員 發表:39 回覆:762 積分:920 註冊:2002-06-27 發送簡訊給我 |
引言: 我想或許是我之前的問題講不清楚,在此補充說明, 我的delphi版本是5,不過我試過7的也不行,用, stdcall及cdecl兩個方法我也都試過了,它compiler會出現 "應用程式出始值(0xc000007b)失敗"然後就是出現 "access violation at 0x77f83941: write of address 0x00000010" process stop. 用上面兩個版本,怎麼run都是出現這個該死的訊息耶, 我是不是漏了什麼沒做呀?? 請大家關心一下喔,謝謝,就算不確定給我個方向也可以,我 會自己去try的...Net 的 DLL 雖然附檔名是「.dll」,但是有很大的不同 他裡面的內容是 MSIL 的 code,要執行的時候必須由 .Net Framework 載入,並經由 JIT compiler (Just in time) 編譯成 machine code 才能執行 不可能直接讓 Delphi 當作 COM 一樣來用的 至於 .Net 能使用之前已經開發好的 COM,則是因為 .Net 有 InterOp 機制 可以去呼叫舊有的 COM 加油喔,喵~
------
歡迎參訪 "腦殘賤貓的備忘錄" http://maolaoda.blogspot.com/ |
jimmy_wei
高階會員 發表:9 回覆:176 積分:147 註冊:2003-08-28 發送簡訊給我 |
|
sryang
尊榮會員 發表:39 回覆:762 積分:920 註冊:2002-06-27 發送簡訊給我 |
引言: 謝謝你的答案,那我可不可以再請教一下,如果 1.我直接用c#寫成com是不是就可以解了呢?? <-- 這個我會試 2.那是不是c# 寫的dll在delphi裡就一定不能執行囉?? 還是我可以乎叫什麼外部的指令,來編譯執行呢?? 還是有沒有其它的解法?如果可以的話,麻煩在指點我一下, 謝謝!據我所知,C# 不能寫 COM,如果要呼叫 C# 的東西,可能只有 Web Service 一途了 加油喔,喵~
------
歡迎參訪 "腦殘賤貓的備忘錄" http://maolaoda.blogspot.com/ |
jimmy_wei
高階會員 發表:9 回覆:176 積分:147 註冊:2003-08-28 發送簡訊給我 |
提供大家一個用COM解的方法,但是還是希望有人可以提供我.DLL的方法
基本上想直接乎叫.NET的DLL或是COM是不可能的,因為.NET在執行COM元件時是透過CRL(Common Runtime Language)來運作,所以必須在中間建立一層COM callable wrapper (CCW)當作之間呼叫的介面,也因如此才會有以下的解法。 注意,要執行以下的指令必需有FrameWork才可以執行 在DOS命令模式下: 1.Create a strong name key:建立註冊碼sn –k C:\TESTWEB.snk 2.產生tlbexp(type library exporter),讓COM Component可以使用.NET Component的properties, methods, and events tlbexp C:\TESTWEB.dll /out: C:\TESTWEB.tlb <--TESTWEB.DLL 是我想要直接呼叫的DLL 3.必需在系統管理工具\元件服務 加上C:\TESTWEB.tlb 這個COM元件 4.Register the Assembly and Create a Type Library: 利用.NET Framework SDK的Assembly Registration Tool(regasm)工具 to create the type library and register。 Regasm /tlb: C:\TESTWEB.tlb C:\TESTWEB.dll 5.Add the Assembly to the Gobal Assembly Cache: 將.NET assembly安裝在Gobal Assembly Cache(GAC),變成能提供分享的assembly gacutil /i C:\ITRIWEB.dll 6.這是DELPHI的範例 uses comobj; procedure TForm1.Button2Click(Sender: TObject); var aa:Integer; Myitriweb: VariaNT; begin Myitriweb:=CreateOLEObject('ITRIWEB.ITRIWEB'); try aa:=connectServer(StringToWideString(WebService.Text,0), StringToWideString(ODBC.Text,0), StringToWideString(UserName.Text,0), StringToWideString(PWD.Text,0)); finally // MyItriweb end; ConnectStatus.Text:=IntToStr(aa); ShowMessage('測試完畢'); end; 7.大功告成,有興趣的人可以試試
編輯記錄
GrandRURU 重新編輯於 2016-08-05 09:18:34, 註解 無‧
|
che1983
一般會員 發表:4 回覆:1 積分:1 註冊:2004-11-01 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |