使用dll包装器部署应用程序

时间:2016-09-08 21:48:55

标签: winforms dll deployment

我试图部署一个WinForms应用程序,该应用程序涉及使用包装类导入外部DLL,如下所示:

[DllImport(ImportedDllName, CallingConvention=CallingConvention.StdCall, CharSet = CharSet.Unicode)]
private static extern void cfg_put_MixerFilePlayerEnabled(IntPtr cfgPtr, int Enabled);

[DllImport(ImportedDllName, CallingConvention=CallingConvention.StdCall, CharSet = CharSet.Unicode)]
private static extern void cfg_get_MixerFilePlayerEnabled(IntPtr cfgPtr, ref int Enabled);

public int MixerFilePlayerEnabled
{
    get { int s = 0; cfg_get_MixerFilePlayerEnabled(m_cfgPtr, ref s); return s; }
    set { cfg_put_MixerFilePlayerEnabled(m_cfgPtr, value); }
}

因此,当我运行我的应用程序debbugin时,一切正常,但是当我发布它时,我收到DLL not found例外。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

如果您的调试机器和发布机器是同一台PC:

  1. 找出"外部DLL"是x86或x64。您的C#包装器也应该相应地运行为x86或x64。
  2. 使用dependencywalker确保C#包装器可以找到"外部DLL"。
  3. 编写一个cpp exe演示,以确保cpp exe可以使用该DLL。然后尝试C#wrapper。
  4. 如果您的调试机器和发布机器是两台PC:

    1. 安装正确版本的vcredist"外部DLL"。
    2. 使用dependencywalker找出您错过的内容。
    3. 编写一个cpp exe演示,以确保cpp exe可以使用该DLL。然后尝试C#wrapper。