调用DLL函数时遇到问题

时间:2019-04-09 08:59:42

标签: c# c++ com

我已经购买了一个打印机设备,该设备随附有DLL,其中包含该功能,并且需要从我的C#代码中调用该DLL中的C ++函数。但是,尝试这样做总是会出现错误。也可以使用应用程序提供的相同代码。以下是我的代码的一部分:

[DllImport("Msprintsdk.dll", EntryPoint = "SetInit", CharSet = CharSet.Ansi)]
public static extern unsafe int SetInit();

并调用上述函数,如:

var res = SetPrintport(new StringBuilder("USB001"),0);

if (res == 0)
{
    Console.WriteLine("Printer Setup Successful.");
}
else
{
    Console.WriteLine("Printer Setup Un-Successful.");
    Console.ReadKey();
    Environment.Exit(0);
}

1 个答案:

答案 0 :(得分:2)

使用C ++ dll时可能会遇到的所有可能问题如下:

首先请确保将DLL放在\ bin \ Debug文件夹中。

接下来确定DLL是x86还是x64。如果是x86 DLL,则需要在VS中选中“首选32位”选项。

它将是什么样子: enter image description here

应该是什么样子(请注意现在已选中“首选32位”):

enter image description here

最后但并非最不重要的一点是,您必须检查所使用的.NET框架。 如果使用.NET 3.5,则您的代码应类似于:

[DllImport("Msprintsdk.dll", EntryPoint = "SetInit", CharSet = CharSet.Ansi)]
public static extern unsafe int SetInit();

var res = SetPrintport(new StringBuilder("USB001"),0);

if (res == 0)
{
    Console.WriteLine("Printer Setup Successful.");
}
else
{
    Console.WriteLine("Printer Setup Un-Successful.");
    Console.ReadKey();
    Environment.Exit(0);
}

如果使用.NET 4或更高版本,则代码应如下所示:

[DllImport("Msprintsdk.dll", CallingConvention = CallingConvention.Cdecl, EntryPoint = "SetInit", CharSet = CharSet.Ansi)]
    public static extern unsafe int SetInit();

var res = SetPrintport(new StringBuilder("USB001"),0);

if (res == 0)
{
    Console.WriteLine("Printer Setup Successful.");
}
else
{
    Console.WriteLine("Printer Setup Un-Successful.");
    Console.ReadKey();
    Environment.Exit(0);
}

请注意添加的CallingConvention = CallingConvention.Cdecl

在我看来,这些是最常见的问题,开始使用C ++ dll时会碰到任何人。

由于我懒于编写自己的:),因此使用提供的代码来演示示例。 希望这对您有帮助。