2 jandhf jandhf 于 2016.01.21 17:39 提问

DllImport 方法调用dll文件返回-4

大侠们,我想问下我用下面方法调用dll文件,用方法openFile_DLL取值时返回值总是-4,请问是何原因?谢谢。
[DllImport("GFileAnalysis.dll", EntryPoint = "openFile", CallingConvention = CallingConvention.Cdecl)]
private static extern int openFile_DLL(string filename);

追问:
在dll文件中openFile方法的返回值为1或0的嘛。为啥子调用的时候返回-4.想不明白,请哪位大侠帮帮忙哇,在线等待。(我的操作系统是WIN 7 64位)

3个回答

caozhy
caozhy   Ds   Rxr 2016.01.21 17:45

CallingConvention.Cdecl
你确认么?大部分dll是StdCall

jandhf
jandhf   2016.01.21 18:02

@caozhy,当然确认了,程序就是这样的。

oyljerry
oyljerry   Ds   Rxr 2016.01.21 18:11

你代码中要看一下你的函数导出预编译宏怎么设置的。如果在代码层,直接Dllimport就可以导入了

jandhf
jandhf 麻烦问下,这个要在哪里看呀?我是引用别人提供的用C写的dll文件。
2 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
DLLImport:无法加载 DLL
DLLImport引入DLL后,使用时报错: (1)首先报“无法加载 DLL, 找不到指定的模块”错误。 解决:须将DLL复制到C:\Windows\system32下或程序bin目录下; (2)复制到目录后,又报“试图加载格式不正确的程序”错误。 解决:检查是否是32为和64位冲突问题,32位调用程序无法调用64位的DLL。特别注意的是,在Win64机器上,出现Winform程序下调
C#调用dll的简单demo(托管)
1.新建一个类型为类库的工程,默认的工程名为ClassLibrary1,我这里就不改了 2.添加函数:   public static void Hello()   {             Console.WriteLine("Hello World!");    } 3.如图: 4.选择菜单栏生成->生成ClassLibrary1,然后在bin目录下的debug目录
C#直接使用DllImport外部Dll的方法
C#.Net调用基本格式: [DLLImport(“DLL文件路径”)] 修饰符 extern 返回值类型 方法名称(参数列表) 如: [DllImport("kernel32.dll", SetLastError = true, EntryPoint = "SetLocalTime")] public static extern int SetSystemTime(ref SystemTi
Mono中的DLLImport
<!-- @page { size: 21cm 29.7cm; margin: 2cm } PRE.western { font-family: "Bitstream Vera Sans Mono", monospace } PRE.cjk { font-family: "Courier", monospace } PRE.ctl
C# 64位win7下DllImport LoadLibrary函数失败
C# 64位win7下DllImport LoadLibrary函数失败 [DllImport["kernel32.dll"]] static extern IntPtr LoadLibrary(string lpFileName); public void Fun() { IntPtr p = LoadLibrary("abc.dll"); }
DllImport路径问题
1、DLL文件必须位于程序当前目录或系统定义的查询路径中(即:系统环境变量中Path所设置的路径)。 2、DLLImport会按照顺序去查找DLL文件(程序当前目录>System32目录>环境变量Path所设置路径)。 3、返回类型变量、方法名称、参数列表一定要与DLL文件中的定义相一致。 4、Asp.net DLLImport路径----使用第三方非托管的DLL(Charles.dll
DllImport 调用DLL类库
      .net 框架程序可以通过静态 DLL 入口点的方式来访问本机代码库。DllImport 属性用于指定包含外部方法的实现的dll 位置。 DllImport 属性定义如下:    namespace System.Runtime.InteropServices {  [AttributeUsage(AttributeTargets.Method)]  public class DllI
DllImport用法
<br />DllImport用法<br />  DllImport 作为一种属性提供第二种方法调用不带类型库的 DLL 中的函数。DllImport 大致与使用 Declare 语句等效,但对如何调用函数提供更多的控制。 <br />  可以将大多数 Windows API 调用与 DllImport 一起使用,只要该调用引用的是共享(有时称为“静态”)方法就可以。不能使用需要类实例的方法。与 Declare 语句不同,DllImport 调用不能使用 MarshalAs 属性。 <br />  使用 D
c# DllImport 错误处理的不足及解决办法
一般而言DllImport 是十分方便的,但是当出现错误时,他给出的错误也十分模糊,同时是不全面的。 比如,之前就遇到一个第三方dll, DllImport 死活说找不到这个dll. 但是我很确定错在这个dll,而且路径也对。 没办法,只能做个vc调用尝试,然后vc调用得到了这个消息: 这才发现,原来找不到的其实不是第三方dll,而是这个第三方另外调用的dll,但是
dll导出(无法解析的外部符号 "__declspec(dllimport))
作为一个c++小白,最近写了个动态链接库,用_declspec导出dll时,在另一个项目引用引用时,总是报错无法解析外部符号 折腾半天,总算摸到门槛,有几个原因 1.两边项目字符编码格式不一样,右键属性-》常规,字符编码默认为uncode,两边要保持一致 2.首先引入库文件目录一定与库文件.lib所在地一样(大部分都是这个引起的),一定要引入lib文件 3.作为新手犯了个错,在写dll文件