调用非托管dll的问题

clarknu 2004-03-22 05:56:46
我用vc做的mfc dll,函数都是包含在类里的,这种情况下怎么找vDllImport的入口啊??怎么使用?我对dll的分类不大了解,但是现在要用非托管的dll,不知道怎么用啊??还有,在vc。net里怎么调用dll啊??添加了引用还说什么不认识某某类。。。。
...全文
112 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
clarknu 2004-04-14
  • 打赏
  • 举报
回复
基本明白了,不懂再问,偶先把分给了再说
qqchen79 2004-04-12
  • 打赏
  • 举报
回复
To Lostinet: 这个的确也行。不过既然还要用C++做Wrapper,不如直接用MC++,再C#一边的代码就不需要[DllImport]或者ReleaseMyClass乐。:)
Lostinet 2004-04-12
  • 打赏
  • 举报
回复
to qqchen79(知秋一叶 [MS MVP]) :

不一定要MC++吧?

例如作一个输出包含这些函数的dll也是可行的:

void * CreateMyClass();

void VisitMyClassMethodA(void* pclass,int arg1,int arg2);

void DestroyMyClass(void* pclass);

也是可行的。
hunterzhi 2004-04-12
  • 打赏
  • 举报
回复
其实 wangsaokui(无间道II(前传)) 已经回答了,入口就是Dll里的函数.
你要对里面的函数比较清楚.
qazsw 2004-04-12
  • 打赏
  • 举报
回复
up
qqchen79 2004-04-12
  • 打赏
  • 举报
回复
我能想到的唯一办法是使用Managed C++做一个中间层,把Mananged调用转成C++ Object Call。因为VC++.NET可以做Unmananged/Mananged混合编程。

TLBIMP是针对COM组件的,和这个没有关系;由于.NET不直接支持C++使用的thiscall调用规范,也不可能直接用DllImport解决。
Lostinet 2004-04-11
  • 打赏
  • 举报
回复
关键是你需要一个全局并且为dll输出的函数.
marvelstack 2004-04-11
  • 打赏
  • 举报
回复
在你的项目中添加引用你的mfc dll,
这样VS.net会自动对你的unmanaged Code进行包装,
接下去就同其他组件一样使用就行了,
不过里面的一些方法和属性类型被转变成了object类型。
clarknu 2004-04-11
  • 打赏
  • 举报
回复
先谢过haohaohaohao大虾,能不能说得详细一些??TLBIMP命令我没听说过?哪能找到相关得参考?
lehehe 2004-04-08
  • 打赏
  • 举报
回复
这种情况直接引用较为麻烦,以下可以参考:
1、使用TLBIMP命令将非托管dll转化为可托管的引用,楼主的问题很可能这样可以解决。这个时候需要使用者对dll的内容十分清楚,包括引用的函数接口,参数等;
2、如果想使用从C++来实现托管环境中没有提供支持的功能,最好使用Vc++。net生成ATL控件,这样成功后系统会自动编译并且注册,只要在控件面板中添加该控件就可以了,这种方法的好处是可以在对象浏览器中看到控件的方法申明!!
paulluo0739 2004-04-08
  • 打赏
  • 举报
回复
回答的什么啊,人家问你“用vc做的mfc dll,函数都是包含在类里的,这种情况下怎么找vDllImport的入口啊”,我也遇到这个问题,还没有解决,高手来看看
wangsaokui 2004-03-22
  • 打赏
  • 举报
回复
先在引用选取你需要用的这个dll,在程序中添加类,举个简单的例子给你,
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.Runtime.InteropServices;
using C1.C1Zip;

namespace Util
{
#region
/// <summary>
/// This Class is used for get or set local machine time
/// </summary>
public class Cls_ChangeDT
{
//this function is used for get local machine time
[DllImport("Kernel32.dll")]
public static extern void GetLocalTime(SystemTime st);

//this function is used for set local machine time
[DllImport("Kernel32.dll")]
public static extern void SetLocalTime(SystemTime st);

//this structure define a systemtime
[StructLayout(LayoutKind.Sequential)]
public class SystemTime
{
public ushort wYear;
public ushort wMonth;
public ushort wDayOfWeek;
public ushort wDay;
public ushort wHour;
public ushort wMinute;
public ushort wSecond;
public ushort wMilliseconds;
}
}
}

110,561

社区成员

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

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

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