2010-09-03 168 views
1

我们得到了一个由C#程序员编写的,编译成可用作COM对象的DLL。使用C#DLL作为COM下的Delphi

我们咨询这些开发人员以获取函数名称和语法,我们可以在注册regasm后使用它。

这是好的,但我们有更多的问题来产生更快的开发(变化),有些东西是不可理解的或不工作的。

我们使用Delphi 6专业版,并使用C#Visual Studio 2008制作的程序集(我认为)。

让我们来看看他们:

1) 我不能使用C#代码的类型库(TLB),因为我无法导入到德尔福。

其结果是:

"Hiba az OLE beállításjegyzék használata közben." 

Translate ~ "Error occured on use OLE typelib/setting lib" 

错误的可能来源:

一个)的Delphi 6不能导入新的COM DLL-S。

b。)我们必须强制C#生成一个更老的格式化的TLB。

我们试图用regasm重新生成TLB,但我们也得到了这个错误。

这可能是不可能的,但如果情况b。)发生,我们需要对C#开发人员说 - 如何编译DLL-s? (DLL-s不能由Delphi引入,因为它们没有自启动部分)。

2.) 有趣: 所有参数正确地转换成变体VICA亦然,但如果C#方法不具有参数,我在Delphi侧得到错误... 例如(伪):

proc A():bool; 

调用A会在Delphi端产生错误。

proc A(Dummy: bool):bool; 

调用A(False)工作正常。

我不知道,为什么我们得到了这个。 你对此有何评论?这是一个C#编译问题?

感谢您的帮助: DD

+1

我很困惑你的问题的一些部分。你说这个C#dll有一个COM接口是可用的,但是你没有把它导入到delphi 6中。我不熟悉delphi,但我假设你没有导入它,你甚至不能编译代码使用它。你可以尝试导入dll而不是tlb吗? – 2011-03-30 23:10:57

回答

1

最佳路线这里是为了获得显示成功使用的DLL通过COM使用,比如C#源代码。 DLL的开发人员应该能够提供。该DLL可能还必须注册regasm而不是regsvr32.exe,因为它将用于本机COM DLL),然后才能通过COM访问该DLL。像往常一样,没有更多的实际代码,回答这样的问题是非常困难的。

+1

您无法注册使用regsvr32公开COM的.net dll。你必须使用regasm。 – 2011-03-30 23:04:53

+0

@Cole W:我不知道。我没有.NET的经验。我修改了我的答案。 – 2011-03-31 06:22:42