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

kfheimao 2012-11-06 09:18:23
在代码里需要导入一个DLL
由于要兼容32位和64位
所以做了两个DLL,分别命名
想在程序启动的时候判断系统位数,导入对应的DLL
但是 [DllImport(Program.DllName)]的DLL名称参数不允许为变量
这个怎么破。。。。?求大神
感觉不难。。。就是不会。。哈哈
分数不多,希望大家帮个忙哈
...全文
215 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
  • 打赏
  • 举报
回复
自己顶。。。

110,534

社区成员

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

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

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