用.NET4.0 C#写一个 COM组件形式的DLL 程序集"ZCom.ZCom"
让PB9.0编写的应用程序调用
调用函数传入N个参数 并且N个参数都要将值返回
OLEObject ZCom
ZCom = Create OLEObject
ZCom.ConnectToNewObject("ZCom.ZCom")
string string1
string1="a"
string string2
string2="b"
string string3
string3="c"
ZCom.ComMethoud1(ref string1,ref string2,ref string3)
textbox1.Text=string1+"|"+string2+"|"+string3
___________________________________________________________
上述部分已经实现,现在的问题是:
需要传入的参数很多,有二三十个。一个一个的写,排列起来麻麻扎扎的,很讨厌
现在想用structure来传这个参数
structure struct
struct.s1=string1
struct.s2=string2
struct.s3=string3
ZCom.ComMethoud2(ref struct)
textbox1.Text=struct.s1+"|"+struct.s2+"|"+struct.s3
但是一直没有成功
____________________________________________________________
之前用PB调用其他语言的标准DLL是可以将structure作为参数传递的
但是现在没成功有2个地方不一样
1.c#
2.是COM组件而非标准DLL
[ComVisible(true)]
[Guid("xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx")】
public struct objstruct
{
public string s1{get;set;}
public string s2{get;set;}
public string s3{get;set;}
}
[ComVisible(true)]
[Guid("xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx")]
public interface _ZCom
{
[DispId(1)]
string ComMethoud1(ref string s1,ref string s2,ref string s3);
[DispId(2)]
string ComMethoud2(ref objstruct stru);
}
[Guid("xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"), InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
public interface ZCom_Events
{
}
[ComVisible(true)]
[ProgId("ZCom.ZCom")]
[Guid("xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"), ClassInterface(ClassInterfaceType.None), ComSourceInterfaces(typeof(ZCom_Events))]
public class ZCom : _ZCom
{
public void ComMethoud1(ref string s1,ref string s2,ref string s3)
{
s1="a";s2="b";s3="c";
}
public void ComMethoud2(ref objstruct stru)
{
stru.s1="a";stru.s2="b";stru.s3="c";
}
}
ComMethoud1 能够正确使用
ComMethoud2不能成功,是因为C#代码有误,还是说COM组件本身就不支持structure?如果不支持,有其他类似的实现方式吗?
------解决思路----------------------
用json串试试,你无非也就是想要一个结构化的传参方式。
------解决思路----------------------
[ComVisible(true)]
[Guid("xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx")]
[ProgId("ZCom.Param")]
public struct objstruct
{
public string s1{get;set;}
public string s2{get;set;}
public string s3{get;set;}
}
public void ComMethoud2(ref objstruct stru)
{
stru.s1="a";stru.s2="b";stru.s3="c";
}
参数也是一个Com对象,方法定义里面不需要ref
OLEObject ZCom
ZCom = Create OLEObject
ZCom.ConnectToNewObject("ZCom.ZCom")
OLEObject p
p= Create OLEObject
p.ConnectToNewObject("ZCom.Param")
p.s1 = "1"
p.s2="2"
p.s3="3"
ZCom.ComMethoud2(p)