我被要求爲一箇舊的delphi程序創建一個.Net dll。我試圖用COM Callable Wrapper來做到這一點,但是當它試圖加載dll時,我總是收到一個錯誤(相當普遍,像「我無法加載dll」)。這裏是技術文檔是這麼說:從delphi程序中調用COM Callable Wrapper不起作用
The DLL only needs to export one function under the name 'AUTHORIZE'.
function Authorize(InXml: PChar): PChar; stdcall;
(Delphi syntax. May be different in other languages.)
這裏是我的CCW代碼:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
namespace ComCallableWrapper
{
[Guid("C3FD922A-FB44-47B1-9C0C-8F7FAF57098B")]
[InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
public interface IAuthorizer
{
[DispId(1)]
string Authorize(string lnpInXml);
}
[ProgId("ComCallableWrapper.Authorizer")]
[ClassInterface(ClassInterfaceType.None)]
public class Authorizer : IAuthorizer
{
public Authorizer()
{
}
public string Authorize(string lnpInXml)
{
return "Approved!";
}
}
}
我也運行此命令 「regasm /tlb:ComCallableWrapper.tlb ComCallableWrapper.dll /代碼庫」 上運行delphi程序的計算機。
我一直在做關於谷歌的一些研究德爾福如何調用一個DLL函數,我發現至少有2種方式:
function Authorize(lnpInXml: pchar): pchar; stdcall; external 'DLLName.dll';
和
oleObject := CreateOleObject('ComCallableWrapper.Authorizer');
ShowMessage(oleObject.Authorize('Approved?'));
它看起來像COM作品有點不同。有沒有辦法改變我的CCW像第一種方式一樣工作?
問候。
第一種方式看起來像是調用平面C DLL而不是COM DLL。你將無法在.NET中創建這樣的DLL。 –
有50億個可能的原因實例化一個COM DLL不起作用。爲了使它變得有趣,微軟使他們都返回基本相同的錯誤代碼。你可以使用Microsoft OLE/COM Object Viewer實例化對象嗎?或與.NET代碼?在解決事情的德爾菲方面之前開始。 –