c# 中如何怎样动态加载C++编写的DLL文件

zhongjilei 2008-09-10 10:59:54
如题,除了DllImport的这种静态的方法
高手帮忙,怎样使用Windows API函数LoadLibrary,GetProcAddress,CallWindowProc执行C++编写的DLL中的方法,
主要是怎样用CallWindowProc实现Dll中的功能,谢谢!!!
...全文
453 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
barbara3299 2011-11-21
  • 打赏
  • 举报
回复
楼主解决了吗 怎么解决的啊
zhongjilei 2008-09-10
  • 打赏
  • 举报
回复
回4楼:

我要实现的是用C#调用C++编写的DLL中的方法,并且利用反射好像不能调用C++编写的DLL,不能对C++编写的类进行实例化,是否有其他的方式来实现调用C#本身编写DLL中使用反射方法的方式呢?

要调用用C++编写DLL中的类
优途科技 2008-09-10
  • 打赏
  • 举报
回复
参考:
http://www.microsoft.com/china/msdn/library/langtool/vcsharp/csharp05162002.mspx
http://blog.csdn.net/dragonsuc/archive/2003/06/30/20791.aspx



try   
{
//動態加載dll文件,
string sDllName = ServiceId.Substring(0,ServiceId.IndexOf("."));
Assembly DllAssembly = Assembly.Load(sDllName);
//執行選定的類別
ISDServer.ITransaction Tx = (ISDServer.ITransaction)DllAssembly.CreateInstance(sDllName+".Transaction");
return Tx.Execute((ISDServer.IProcess)this,ServiceId,oType,sParam);



如下也可以:
  string   DllPath   =   Application.StartupPath   +   @"\someDLL.dll";   
System.Reflection.Assembly assmble = System.Reflection.Assembly.LoadFile(DllPath);

Type tmpType = assmble.GetType("someDLL.ClassA");
System.Reflection.MethodInfo tmpM = tmpType.GetMethod("Add");
object tmpobj = assmble.CreateInstance("someDLL.ClassA");
int i = (int)tmpM.Invoke(tmpobj, new object[]{2,3});

----------ClassA的定义--------------------
using System;

namespace someDLL
{
/// <summary>
/// ClassA 的摘要说明。
/// </summary>
public class ClassA
{
public ClassA()
{
//
// TODO: 在此处添加构造函数逻辑
//
}

public int Add(int a, int b)
{
return a+b;
}
}
}


zhongjilei 2008-09-10
  • 打赏
  • 举报
回复
在API中CallWindowProc的原型是:

LRESULT CallWindowProc(WNDPROC lpPrevWndFunc,
HWND hWnd,
UINT Msg,
WPARAM wParam,
LPARAM lParam
);

那么在C#中怎样声明CallWindowProc

我编写的部分代码是:
string[] files = Directory.GetFiles(Application.StartupPath, "tt.dll");
foreach(string file in files)
{
hModule = LoadLibrary(file);
farProc = GetProcAddress(hModule,"Add");//Dll中有一个用C++编写的类,类中有一个函数Add
CallWindowProc(*, *, *, *, *);
}

CallWindowProc中的各个参数分别代表什么,怎样将farProc和Add的参数等信息传进去,让其执行?



LovingAlison 2008-09-10
  • 打赏
  • 举报
回复
学习 帮顶
ZengHD 2008-09-10
  • 打赏
  • 举报
回复
既然是API,在C#也是一样用的

110,534

社区成员

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

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

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