HINSTANCE m_hLibrary;
m_hLibrary=LoadLibrary("mydll.dll");
typedef int(_cdecl *Connect)(int,int,int); //调用的是一个int fun(int,int,int)的函数
Connect Proc;
Proc = (Connect)GetProcAddress(m_hLibrary,"fun");
int x=Proc(3,4,25);
FreeLibrary(m_hLibrary=LoadLibrary("mydll.dll");这是一段VC写的显式调用Win32动态库的代码,哪位高手能将代码改写成C#的
m_hLibrary=LoadLibrary("mydll.dll");
typedef int(_cdecl *Connect)(int,int,int); //调用的是一个int fun(int,int,int)的函数
Connect Proc;
Proc = (Connect)GetProcAddress(m_hLibrary,"fun");
int x=Proc(3,4,25);
FreeLibrary(m_hLibrary=LoadLibrary("mydll.dll");这是一段VC写的显式调用Win32动态库的代码,哪位高手能将代码改写成C#的
解决方案 »
- C# 窗体中saveFileDialog控件如何保存.rar格式的文件?(100分)
- Help!!!c#菜鸟问题
- 请求支援!! 谢了
- 访问远程数据库的Sql语句(在线)等
- 为什么Drag事件全都失效了呀?AllowDrop也都设为True了呀,但是事件全都不触发呀???
- 请问谁知道 UDP穿透 HTTP代理
- 给 用System.Diagnostics.Process启动的进程 传递参数,新进程怎么接收参数?
- SharpZipLib如何给压缩的文件加密
- 两个不同类型的程序相互发送消息!
- 请问vs.net 2003中文版是几张cd?版本号是多少?谢谢
- 用C#。NET 开发进销存 远程数据传输怎么样实现?
- 在nHibernate里,大家是怎样处理联合主键的?
如果程序中不调用DllImport声明函数的话,dll也不会加载,在C#中也只有用此方法来调用。
static extern int GetProcAddress (
int iX,
int iY,
int iZ)
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;
}
}
}
{
private DynamicBeeper()
{
}
static void Main()
{
object b = (bool)DynamicBeeper.DynamicPInvoke("user32.dll", "MessageBeep", typeof(bool),
new Type[]{ typeof(uint) }, new Object[]{ (uint)0 });
}
public static object DynamicPInvoke(string dll, string entryPoint,
Type returnType, Type [] parameterTypes, object [] parameterValues)
{
// Create a dynamic assembly and a dynamic module
AssemblyName asmName = new AssemblyName();
asmName.Name = "tempAssembly";
AssemblyBuilder dynamicAsm =
AppDomain.CurrentDomain.DefineDynamicAssembly(asmName,
AssemblyBuilderAccess.Run);
ModuleBuilder dynamicMod =
dynamicAsm.DefineDynamicModule("tempModule"); // Dynamically construct a global PInvoke signature
// using the input information
MethodBuilder dynamicMethod = dynamicMod.DefinePInvokeMethod(
entryPoint, dll, MethodAttributes.Static | MethodAttributes.Public
| MethodAttributes.PinvokeImpl, CallingConventions.Standard,
returnType, parameterTypes, CallingConvention.Winapi,
CharSet.Ansi); // This global method is now complete
dynamicMod.CreateGlobalFunctions(); // Get a MethodInfo for the PInvoke method
MethodInfo mi = dynamicMod.GetMethod(entryPoint); // Invoke the static method and return whatever it returns
return mi.Invoke(null, parameterValues);
}
}
我找到动态加载的方法了,但是返回值还有点问题