社区
C#
帖子详情
[50分]C#调用dll文件中的函数的问题
ApiToSharp
2007-11-14 08:04:48
dll中的函数,是不是除了api以外,还有com?
例如shell.dll中的filerun()函数(无参数)
我用调用api函数的格式写,编译没问题,但运行时出现异常,说格式不正确
该怎么调用呢?(麻烦把命名空间,声明等都写出来)
注:js中是这样的new ActiveXObject("shell.application").filerun()
...全文
325
11
打赏
收藏
[50分]C#调用dll文件中的函数的问题
dll中的函数,是不是除了api以外,还有com? 例如shell.dll中的filerun()函数(无参数) 我用调用api函数的格式写,编译没问题,但运行时出现异常,说格式不正确 该怎么调用呢?(麻烦把命名空间,声明等都写出来) 注:js中是这样的new ActiveXObject("shell.application").filerun()
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
11 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
icemangd
2008-05-07
打赏
举报
回复
我也遇到了一个 这方面的问题 就是 用 web service 调用 dll 请问 这方面的有没有说明 或者谁知道怎么用!!
曲滨_銘龘鶽
2007-11-22
打赏
举报
回复
首先这两种方法我都测试过了、应该不会出问题。
第一种方法可行,不过有个问题:
我用调用api的方式,
使用shell32.dll提示找不到名为FileRun的入口点
使用shell.dll提示格式不正确
这说明FileRun函数存在于shell.dll中,而不是shell32.dll
这里为什么添加shell32.dll的引用?
答:win32 系统都是用 shell32.dll 你的操作时调用运行对话框,shell.dll win98 后就被废弃了
而且你调用的是com函数,当然是要引用com dll 的,因为你题中给的调用方式根本就是调用的com 而不是 api 方式
而且 FileRun 是一个 windows com api,windows api 不是叫这个名字是一个隐藏api 61api 号不知道现在变了没
===============================
第二种方法
object oShell = Activator.CreateInstance(tShell)处发生异常(值不能为空)
答:
//通过 ProgID 取得 com 对象类型
Type tShell =Type.GetTypeFromProgID( "Shell.Application ");
//实列对象
object oShell = Activator.CreateInstance(tShell);
如果 tShell 为空证明你的系统的 com 注册表有问题(番茄花园版本有这问题),这个对象在任何系统都应该存在
我很多年前用过好多次了、
==================================================================================
还有,第一种光是一个exe无法运行,必须要拷贝dll
可不可以把dll嵌入到exe
至少形式上只有一个exe就可以执行
或者不嵌入也行,直接引用%windir%\system32中的shell32.dll而不是要重新生成一个dll
太感谢你了,麻烦把我说的各种情况都解释一下
再次致谢
答:那个dll就是一个桥负责 com 到 .net ,的转换本身没有任何意义、如果不想带dll,还是用第二方式比较好而且我认为第二种出错、第一种也不好使。
如果坠入那个引用过来的dll 可以放到资源里,如果是vs2005很方便,在main函数里写出去就好用了
============================================================================
ApiToSharp
2007-11-16
打赏
举报
回复
麻烦哪些高人回答一下我在3,4,5楼提出的问题,谢谢了
wdzr_826
2007-11-15
打赏
举报
回复
1楼说的全,直接引用,或是反射
ptpa
2007-11-15
打赏
举报
回复
xuele
chxljtt
2007-11-15
打赏
举报
回复
我想这个应该讲的很详细!
http://blog.csdn.net/pansiom/archive/2006/01/01/568096.aspx
ApiToSharp
2007-11-15
打赏
举报
回复
或者不嵌入也行,直接引用%windir%\system32中的shell32.dll而不是要重新生成一个dll
太感谢你了,麻烦把我说的各种情况都解释一下
再次致谢
ApiToSharp
2007-11-15
打赏
举报
回复
还有,第一种光是一个exe无法运行,必须要拷贝dll
可不可以把dll嵌入到exe
至少形式上只有一个exe就可以执行
ApiToSharp
2007-11-15
打赏
举报
回复
谢谢
第一种方法可行,不过有个问题:
我用调用api的方式,
使用shell32.dll提示找不到名为FileRun的入口点
使用shell.dll提示格式不正确
这说明FileRun函数存在于shell.dll中,而不是shell32.dll
这里为什么添加shell32.dll的引用?
第二种方法
object oShell = Activator.CreateInstance(tShell)处发生异常(值不能为空)
曲滨_銘龘鶽
2007-11-14
打赏
举报
回复
不要忘记
using System.Reflection;
曲滨_銘龘鶽
2007-11-14
打赏
举报
回复
============= 1,直接添加引用 %windir%\system32\Shell32.dll ========
写代码
Shell32.ShellClass sc = new Shell32.ShellClass();
sc.FileRun();
============== 2,不用添加任何引用直接用反射 =========================
//通过 ProgID 取得 com 对象类型
Type tShell =Type.GetTypeFromProgID("Shell.Application");
//实列对象
object oShell = Activator.CreateInstance(tShell);
//反射调用
tShell.InvokeMember("FileRun"
, BindingFlags.InvokeMethod | BindingFlags.Default
, null
, oShell
, null //如果有参数在这里 new object[]{参数一,参数二,参数三,....}
);
//释放对象
System.Runtime.InteropServices.Marshal.ReleaseComObject(oShell);
C#
调用
C++
DLL
(
函数
参数包含指针)
C#
调用
C++
DLL
,C++
DLL
中
的
函数
参数包含指针。 绝对可用。
VB
调用
C#
Dll
文件
在工作
中
遇到了在VB6.0的程序里要
调用
C#
的
Dll
的
问题
,显然这两个开发环境属于不同的平台。在网上拜读了几位大师的文章后,在实际试验
中
还是会发生这样那样的
问题
,最后还是实现了预期效果,在此我把我的实验步骤和...
vb6
调用
C#
Dll
函数
vb6
调用
C#
Dll
函数
C#
Csharp
调用
C++的
DLL
中
的回调
函数
一个是C++的
DLL
以及源码 一个是
调用
他的
C#
源码 都是VS2010编译测试通过
c#
调用
C++编写 的
DLL
函数
各种参数传递
问题
。
c#
调用
C++编写 的
DLL
函数
各种参数传递
问题
。数据处理
问题
等等。
C#
110,545
社区成员
642,579
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章