我有一个 C# DLL(.NET 2.0 框架),它被设置为 COM Visible。
接口声明为
[Guid("....")]
[InterfaceType(ComInterfaceType.InterfaceIDispatch)]
public interface IMyClass
{
[DispId(1)]
string myFunc(string url, ref string[] keys);
}
[Guid("...")]
[ClassInterface(ClassInterfaceType.None)]
[ProgId("MyClass.Lib")]
public class MyClass:IMyClass
{
public string myFunc(string url, ref string[] keys)
{
string retString = "";
// do my stuff
return retString;
}
}
这个类是通过调用注册的RegAsm.exe
。
我在 VB6 中测试了这个 DLL,它工作正常。
Dim myClassInstance As MyClass
Set myClassInstance As New MyClass
Dim keys(0 to 1) As String
keys(0) = "a"
keys(1) = "b"
Dim url As String
url = "https://10.0.0.2"
Dim response As String
response = myClassInstance.myFunc(url, keys)
现在我需要在 Delphi 7 中使用这个 DLL(我对 Delphi 没有先验知识)。
我使用 Tlbimp 生成所需的文件。看起来我已经可以在 Delphi 中引用 DLL,但它不起作用:
var
myClassInstance : IMyClass;
url : WideString
keys : array[0..1] of WideString;
begin
url := 'https://10.0.0.2';
keys[0] := 'a';
keys[1] := 'b';
myClassInstance.MyFunc(url, keys); // Incompatible types error
end;
函数签名是(来自 Delphi 7 Editor):
function(const url: WideString; var keys: OleVariant): WideString;
我应该如何在 Delphi 中将正确的参数传递给这个 DLL?