【问题标题】:Invoke method for dll in WindowsForms在 WindowsForms 中调用 dll 的方法
【发布时间】:2012-02-21 14:33:20
【问题描述】:

我有一个包含这个函数的 dll:

int __stdcall PrnText(char *printtext);

在 Windows 窗体中,我有这段代码来调用 dll:

[DllImport("Printing.dll", EntryPoint = "PrnText", CharSet = CharSet.Ansi)]
public static extern int PrnText(char *printtext);

当我在 C# 代码中调用该函数时,我收到如下错误:“无法将字符串转换为 char*

PrnText("Hello World");

我应该为 PrnText() 提供什么参数才能使其工作?

后期编辑:

  Parameter: printtext
  pointer to string containing text to be printed

【问题讨论】:

标签: c# winforms printing invoke


【解决方案1】:

CLR 知道如何在运行时将string 转换为非托管char*。您应该使用接受string 的签名,例如:

public static extern int PrnText(string printtext);

请注意,这仅在仅输入参数时才有效。

【讨论】:

  • 你的意思是用户输入吗?比如文本框什么的?
  • 只有在您调用的代码不需要编辑字符串时才有效。在这种情况下,您需要传递 StringBuilder,因为字符串是不可变的。
  • @Emil 不,我的意思是仅在 dll 函数中输入不会以任何方式更改 char*
  • @EmilDumbazu:不,这意味着您只能将字符串作为输入参数传递给您的本机代码 - 它无法修改它。如果您的本机函数需要更改字符串,请改为传递 StringBuilder
  • 你能给我一个 StringBuilder 的例子吗?
猜你喜欢
  • 1970-01-01
  • 2020-12-10
  • 1970-01-01
  • 1970-01-01
  • 2013-05-12
  • 1970-01-01
  • 2011-08-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多