“指定的程序无法找到”使用.NET 4个错误(“The specified procedure co

2019-07-20 00:41发布

我在64位的Windows 7盒与开发的Visual Studio 2012(11.0.51106.01更新1)。

我有一些编译C代码为(32位)DLL中的支持项目。 在我的头,我有:

#define RET_TYPE(type) _declspec(dllexport) type __stdcall

RET_TYPE(int) test_dll_call(int invar);

在我的C文件我有:

RET_TYPE(int) test_dll_call(int invar)
{
   int retVal = 4 * invar;

   return retVal;
}

我也有一个(32位)WPF C#加载一个类,如下所示的内部的DLL应用:

[DllImport("MyDll.dll", CharSet = CharSet.Ansi, BestFitMapping = true, ThrowOnUnmappableChar = true)]
public static extern int test_dll_call(int invar);

这被包裹如下:

public void Wrap_TestDllCall()
{
   try
   {
      int outTest = 0;
      int invar = 3;

      outTest = test_dll_call(invar);
   }
   catch (Exception ex)
   {
      dllError = ex.ToString();
   }
}

当我在调试器上我的开发运行它,这工作正常。 如果我所有相关的文件复制到一个单独的文件夹,并从那里运行它,它工作正常。

如果我所有必要的文件夹复制到运行32位Windows XP SP3,我得到以下错误另一台计算机:

System.DllNotFoundException: Unable to load DLL 'MyDll.dll': The specified procedure could not be found. (Exception from HRESULT: 0x8007007F)
   at MyNamespace.MyClass.test_dll_call(Int32 invar)
   at MyNamespace.MyClass.Wrap_TestDllCall()

我用的Dependency Walker在我的两个编译EXE和DLL; 它发现的唯一缺少的DLL wer.dllieshims.dll ,从我的研究不需要在XP。

我已经安装了VS2012 C ++可再发行,和.NET 4和.NET 4.0.3更新。 仍然没有运气。

编辑正如汉斯指出,这似乎是应用程序无法在DLL中找到的程序; 我也曾尝试:

[DllImport("MyDll.dll", CallingConvention=CallingConvention.Cdecl)]
public static extern int test_dll_call(int invar);

__declspec(dllexport) int __cdecl test_dll_call(int invar);

这也适用于我的dev的盒子很好,但给出了WinXP的箱相同的错误。

救命!

Answer 1:

问题解决了。 需要注意以下几点,我通过解决疑难步骤,对于那些谁在未来偶然发现了这一点。

  1. 这个错误并不一定意味着它无法找到程序X -而这可能意味着它无法找到功能Y ,从另一个DLL,被名为X
  2. 确保编译“释放”模式的DLL,作为C ++可再发行将不包括调试的DLL。
  3. 首先得有个外壳功能,并通过一个补充件回来,一个。

在我上面的测试例子,这个问题是我在编译的调试版本。

然而,在我的完整功能,这种改变并没有解决问题。 原来我是缺少一些的DLL的Dependency Walker没赶上。



文章来源: “The specified procedure could not be found” error with .NET 4