C#DLL的相关问题 大侠入

mrpeterchen 2012-05-17 04:41:45
用C#生成了DLL文件,C#代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;


namespace LeonQtp
{
public class Qtp_Msg
{
public static int MessageBoxL(string Msg, string Caption)
{
MessageBox.Show(Msg, Caption, MessageBoxButtons.OKCancel);
return 0;
}
}
}

###############################################################################################
上述代码生成的DLL,可用C#调用成功
但是在QTP中,用下面语句调用失败:
Set CSharp_Msg = DotNetFactory.CreateInstance("LeonQtp.Qtp_Msg","C:\Leon\New\LeonQtp.dll")
Ret = CSharp_Msg.MessageBoxL("Call by DotNetFactory!","by DNF obj")

Error如下:
Could not load file or assembly 'file:///C:\Leon\New\LeonQtp.dll' or one of its dependencies. This assembly is built by a runtime newer than the currently loaded runtime and cannot be loaded.

大家帮忙看下吧~~~
...全文
287 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
mrpeterchen 2012-05-23
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 的回复:]
降到2.0肯定可以,刚试过
[/Quote]

大侠, 这个指的什么版本啊 ? 我用的VC2010,我怎么调编译器版本啊?
bigbaldy 2012-05-22
  • 打赏
  • 举报
回复
降到2.0肯定可以,刚试过
bigbaldy 2012-05-22
  • 打赏
  • 举报
回复
我做过自动化测试,搞过这个,也有人遇到过这个问题,你降低编译这个dll时的运行时版本就行了,反正4.0肯定不行
mrpeterchen 2012-05-22
  • 打赏
  • 举报
回复
.Net对象 是不是都是用COM的技术实现的?
以前用DLL的时候,DLL如果导出的是对象,那么调用的时候很不方便,有语言限制,编译器限制的。
用C写的DLL,如果不用.def的话有编译器限制,因为函数名会因为编译器不同而不同。
用了.def可以解决函数名变掉的问题。但是貌似.def里面只能导出函数,没法导出对象的。
而且,还有语言限制问题,有的语言调用约定不一样,也比较讨厌。

但是用了C#的.NET对象,发现DLL调用变简单了。。。

貌似VB可以直接调用C#的DLL。。C#也能调用VB的DLL。。。

以前看过些COM的技术文档,知道如果凭借COM的技术是可以生成跨语言的DLL的

所以就不由的想,.NeT对象封装的对象,是否都是用了COM技术,其实质就是COM对象。

今天查了DotNetFactory文档,发现CreateInstance函数返回值是一个COM接口。文档原文如:
Returns a COM interface for a .NET object

有没有人用过的,帮忙看看啊~~~
愁死了~~
ohkuy 2012-05-21
  • 打赏
  • 举报
回复
错误信息不是有么,是不是没有加载LeonQtp.dll的依赖项,
比如它依赖哪些dll,都要加载
mrpeterchen 2012-05-21
  • 打赏
  • 举报
回复
还是不行。。貌似这不是问题根源

有人没
WAN 2012-05-18
  • 打赏
  • 举报
回复
看error似乎是该dll的.net framework版本比调用者的高。试试升级QTP或其.net插件
EnForGrass 2012-05-18
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 的回复:]

qtp的语言是VB Script,不是C 没必要双斜杠。。双斜杠也报错的

大家能不能帮忙看看。。DotNetFactory对象,是不是只能生成COM的实例 ?
我的C#的DLL目前不是用的COM~
[/Quote]
sorry,没看清楚
是不是和Assembly.Load("foo"); 这种调用差不多,把dll后最去掉试试
Set CSharp_Msg = DotNetFactory.CreateInstance("LeonQtp.Qtp_Msg","C:\Leon\New\LeonQtp")
mrpeterchen 2012-05-18
  • 打赏
  • 举报
回复
qtp的语言是VB Script,不是C 没必要双斜杠。。双斜杠也报错的

大家能不能帮忙看看。。DotNetFactory对象,是不是只能生成COM的实例 ?
我的C#的DLL目前不是用的COM~
SuperBigMan 2012-05-18
  • 打赏
  • 举报
回复
双斜杠
mrpeterchen 2012-05-18
  • 打赏
  • 举报
回复
不好意思,还是报错。。。加@以后报语法错误~~

继续等待
ComeBeer 2012-05-17
  • 打赏
  • 举报
回复
但愿对你的学习有所帮助
evelyn_green 2012-05-17
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
Set CSharp_Msg = DotNetFactory.CreateInstance("LeonQtp.Qtp_Msg",@"C:\Leon\New\LeonQtp.dll")
[/Quote]
大虾真是仁精呀,这么都..
cnfixit 2012-05-17
  • 打赏
  • 举报
回复
反斜杠是转义的,要么俩,要么前面弄个@
anzhiqiang_touzi 2012-05-17
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
Set CSharp_Msg = DotNetFactory.CreateInstance("LeonQtp.Qtp_Msg",@"C:\Leon\New\LeonQtp.dll")
[/Quote]
EnForGrass 2012-05-17
  • 打赏
  • 举报
回复
Set CSharp_Msg = DotNetFactory.CreateInstance("LeonQtp.Qtp_Msg",@"C:\Leon\New\LeonQtp.dll")

111,126

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧