当前位置:编程学习 > C#/ASP.NET >>

COM 编程遇到的类型转换问题

COM 编程问题。帮帮忙吧。急。我都要疯了 [所有相关帖子]

 


COM 编程问题。帮帮忙吧。急。我都要疯了

开发环境:vs2005, c#
我现在遇到了一个问题,我使用一个第三放的现成COM组件, XXX.TLB,在把这个文件添加到项目后,一开始还正常,
调用一些函数什么的都没有问题。现在忽然碰到了一个问题,弄了三四天了,还是没有结果。
这个问题是有一部分函数不好用。这些函数在开发环境的对象浏览器中原形看到如下:
object GetLinks();


但是在手中已有的文档中,原形如下:
IDispatch **GetLinks(); 
文档对该函数的说明是:返回值是一个指向 Links 对象指针的指针。 

在程序中我是这样使用的:

Links linkset;
linkset = (Links)GetLinks();    <----- 就是这行出错

我把报错的异常信息贴在了下面:
---------------------------------------
   在 xxxx.Form1.ConnectServer() 位置 D:\My Documents\Visual Studio 2005\Projects\xxxx\xxxx\Form1.cs:行号 72
   
System.InvalidCastException: 无法将类型为“System.__ComObject”的 COM 对象强制转换为类类型“Links”。进入 CLR 且不支持 IProvideClassInfo 或没有注册任何互操作程序集的 COM 组件都将包装在 __ComObject 类型中。这种类型的实例不能强制转换为任何其他类;不过,只要基础 COM 组件支持对接口 IID 的 QueryInte易做图ce 调用,就能将这些实例强制转换为接口。
   在 xxxx.Form1.ConnectServer() 位置 D:\My Documents\Visual Studio 2005\Projects\xxxx\xxxx\Form1.cs:行号 72
---------------------------------------

现在实在是不知道怎么弄了。能想到的方法我都想到了,可就是解决不了。我都要疯了。各位牛人,帮帮忙吧。真的要疯了。
--------------------编程问答--------------------

你应用的第三方的控件?
如果是的话可能第三方 采用的是OLE开发的控件。那么需要引入一些控件,或者你需要安装一些其他的软件,
也可能你安装了相应的软件,但是,你安装的版本比较低。


如果应用这个第三方控件,你需要询问厂家,都是需要配置什么软件环境,以及安装软件环境的版本。

希望能有些帮助。 --------------------编程问答-------------------- 需要告诉.Net返回类型不是一个普通object, 而是一个com接口.

声明[return: MarshalAs(UnmanagedType.Inte易做图ce)]
    public static object GetLinks();

再尝试将返回值强制转型. --------------------编程问答-------------------- 哎。嗟余听鼓应官去。完结 --------------------编程问答-------------------- 你的.net framework版本太高,把你的版本配置的低一点。
补充:.NET技术 ,  C#
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,