我已经购买了一个打印机设备,该设备随附有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);
}
答案 0 :(得分:2)
使用C ++ dll时可能会遇到的所有可能问题如下:
首先请确保将DLL放在\ bin \ Debug文件夹中。
接下来确定DLL是x86还是x64。如果是x86 DLL,则需要在VS中选中“首选32位”选项。
应该是什么样子(请注意现在已选中“首选32位”):
最后但并非最不重要的一点是,您必须检查所使用的.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时会碰到任何人。
由于我懒于编写自己的:),因此使用提供的代码来演示示例。 希望这对您有帮助。