C# 关于导入DLL的名称问题

kfheimao 2012-11-06 09:18:23
在代码里需要导入一个DLL
由于要兼容32位和64位
所以做了两个DLL,分别命名
想在程序启动的时候判断系统位数,导入对应的DLL
但是 [DllImport(Program.DllName)]的DLL名称参数不允许为变量
这个怎么破。。。。?求大神
感觉不难。。。就是不会。。哈哈
分数不多,希望大家帮个忙哈
...全文
249 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
kxloveh 2012-11-06
  • 打赏
  • 举报
回复
引用 8 楼 kfheimao 的回复:
引用 7 楼 qiaohuyue 的回复: C# code1234567891011你只能给 DLL 改名了, [DllImport("Dll64"),EntryPoint="SayHello"] public static void extern SayHello64(); [DllImport("Dll32"),EntryPoint="SayHello"]public static ……
lz没听懂俺的意思啊,这个名称SayHello64,SayHello32是声明在c#当前代码的,不用改DLL中的代码.c #中调用的函数名不一定要和DLL中的函数名相同,只要函数式在[DllImport("Dll64"),EntryPoint="SayHello"]下面立即声明即可。这回懂了吧
kfheimao 2012-11-06
  • 打赏
  • 举报
回复
引用 7 楼 qiaohuyue 的回复:
C# code1234567891011你只能给 DLL 改名了, [DllImport("Dll64"),EntryPoint="SayHello"] public static void extern SayHello64(); [DllImport("Dll32"),EntryPoint="SayHello"]public static void exter……
你这是要改DLL里的方法名啊。。关键这个DLL的源代码不在我这。。。
XBodhi. 2012-11-06
  • 打赏
  • 举报
回复
你只能给 DLL 改名了, 

[DllImport("Dll64"),EntryPoint="SayHello"] 
public static void extern SayHello64();



[DllImport("Dll32"),EntryPoint="SayHello"]
public  static void extern SayHello32();

这种 哈哈,[
kxloveh 2012-11-06
  • 打赏
  • 举报
回复
引用 4 楼 kfheimao 的回复:
引用 3 楼 kxLoveH 的回复: 32位和64位的DLL好像名称不一样吧。 如果不一样的话那就好说了: [DllImport(Program.DllName),EntryPoint="函数名"] public void extern MethodName(); 这个MethodName是可以自己取名字的,不一定要和 EntryPoint中的函数名相同哦。 名称不一样,……
是的啊,我举个例子吧: 32位DLL名称为:DLL32,其中有个函数:SayHello 64位DLL名称为:DLL64,其中有个函数也是:SayHello 然后分别:

[DllImport("Dll32"),EntryPoint="SayHello"]
public  static void extern SayHello32();

[DllImport("Dll64"),EntryPoint="SayHello"]
 public static void extern SayHello64();
然后你在调用之前判断: if(32位) SayHello32(); else SayHello64();
kfheimao 2012-11-06
  • 打赏
  • 举报
回复
引用 2 楼 qiujialongjjj 的回复:
先全部引用,两个名字别一样,在代码里加判断
貌似不太合理啊。。。因为按照这样改 改动太大了
kfheimao 2012-11-06
  • 打赏
  • 举报
回复
引用 3 楼 kxLoveH 的回复:
32位和64位的DLL好像名称不一样吧。 如果不一样的话那就好说了: [DllImport(Program.DllName),EntryPoint="函数名"] public void extern MethodName(); 这个MethodName是可以自己取名字的,不一定要和 EntryPoint中的函数名相同哦。
名称不一样,不过里面的方法名称都一样。 首先[DllImport(Program.DllName),EntryPoint="函数名"]这句就会报错 因为DllImport后面这个参数必须是常量,不能是变量
kxloveh 2012-11-06
  • 打赏
  • 举报
回复
32位和64位的DLL好像名称不一样吧。 如果不一样的话那就好说了: [DllImport(Program.DllName),EntryPoint="函数名"] public void extern MethodName(); 这个MethodName是可以自己取名字的,不一定要和 EntryPoint中的函数名相同哦。
风一样的大叔 2012-11-06
  • 打赏
  • 举报
回复
先全部引用,两个名字别一样,在代码里加判断
kfheimao 2012-11-06
  • 打赏
  • 举报
回复
自己顶。。。
#region 导入API函数 [DllImport("avicap32.dll")]//包含了执行视频捕获的函数,它给AVI文件I/O和视频、音频设备驱动程序提供一个高级接口 public static extern IntPtr capCreateCaptureWindow(string lpszWindowName, int dwStyle, int x, int y, int nWidth, int nHeight, IntPtr hwndParent, int nID); /************参数说明************* * * 函数:capCreateCaptureWindow * * lpszWindowName:标识窗口的名称 * dwStyle:标识窗口风格 * x、y:标识窗口的左上角坐标 * nWidth、nHeight:标识窗口的宽度和高度 * hWnd:标识父窗口句柄 * nID:标识窗口ID * * 返回值:视频捕捉窗口句柄。 * ********************************/ [DllImport("AVICAP32.dll", CharSet = CharSet.Unicode)] public static extern bool capGetDriverDescription(int wDriverIndex, StringBuilder lpszName, int cbName, StringBuilder lpszVer, int cbVer); [DllImport("User32.dll")] public static extern bool SendMessage(IntPtr hWnd, int wMsg, bool wParam, int lParam); [DllImport("User32.dll")] public static extern bool SendMessage(IntPtr hWnd, int wMsg, short wParam, int lParam); [DllImport("User32.dll")] public static extern bool SendMessage(IntPtr hWnd, int wMsg, int wParam, int lParam); [DllImport("User32.dll")] public static extern bool SendMessage(IntPtr hWnd, int wMsg, short wParam, FrameEventHandler lParam); [DllImport("User32.dll")] public static extern bool SendMessage(IntPtr hWnd, int wMsg, int wParam, ref BITMAPINFO lParam); [DllImport("User32.dll")] public static extern bool SendMessage(IntPtr hWnd, int wMsg, int wParam, ref CAPDRIVERCAPS lParam); [DllImport("User32.dll")] public static extern bool SendMessage(IntPtr hWnd, int wMsg, int wParam, ref CAPTUREPARMS lParam); [DllImport("User32.dll")] public static extern bool SendMessage(IntPtr hWnd, int wMsg, int wParam, ref CAPSTATUS lParam); [DllImport("User32.dll")] public static extern int SetWindowPos(IntPtr hWnd, int hWndInsertAfter, int x, int y, int cx, int cy, int wFlags); [DllImport("avicap32.dll")] public static extern int capGetVideoFormat(IntPtr hWnd, IntPtr psVideoFormat, int wSize); #endregion

111,120

社区成员

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

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

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