2017-09-21 24 views
1

我需要从C#调用非托管DLL的本机方法。 DLL源代码当然不可用(由“第三方”提供)。如何在C#中实现回调从具有多个参数的本机DLL方法检索返回码

机DLL方法应该接受两个参数,并返回一个(本机)的整数代码:

MyDLLNativeMethod(字符串文件名,INT返回码)

机DLL方法的第一个参数是一个字符串(文件名)&秒必须是一个“参考”来收集执行后的返回码。我对如何获得返回码感到困惑。 DLL调用正常工作,根据第一个参数生成预期的文件。

我应该如何实现所需的回调以对检索到的不同返回代码值执行操作?

// ~~~~~~~~~~~~~~~~~~~~ 
// Main entry point 
// ~~~~~~~~~~~~~~~~~~~~ 
namespace MyProject 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      MyDLLCaller _dllcaller = new MyDLLCaller(); 
      _dllcaller.MyDLLNativeMethod("test_file.txt"); 
     } 
    } 
} 

// ~~~~~~~~~~~~~~~~~~~~ 
// DLL calling class 
// ~~~~~~~~~~~~~~~~~~~~ 
    namespace MyProject 
    { 
     class MyDLLCaller 
     { 
      // DLL Loading  
      [DllImport(@"C:\test\mydll.dll")] 
      public static extern int MyDLLNativeMethod(string _filename); 

      // Native DLL method pseudo code : 
      // MyDLLNativeMethod(string filename, int returncode). 
     } 
    } 

在此先感谢

回答

1

如果返回代码是第二个参数,我认为你应该使用out关键字此:

int returncode = 0; 

[DllImport(@"C:\test\mydll.dll")] 
public static extern int MyDLLNativeMethod(string _filename, out int returncode); 

if(returnCode != 0) 
{ 
    // something went wrong 
} 

某些文件,您知道应该返回错误代码试试吧。

+0

它是否适用于您?您想将答案标记为已接受吗? – mortb

0

如果外部调用上述声明与您的图书馆工作,你从调用返回的代码。

var retCode = _dllcaller.MyDLLNativeMethod("test_file.txt"); 
+0

使用上面的声明:'public static extern int MyDLLNativeMethod(string _filename,out int returncode);'现在Visual Studio抱怨'“当仅仅调用这个方法时没有给出对应于所需的形式参数returncode'的参数“_filename”参数:'_dllcaller.MyDLLNativeMethod(“test_file.txt”);' – donmelchior

相关问题