如何从 C# 代码的库中调用 C 方法?
Posted
技术标签:
【中文标题】如何从 C# 代码的库中调用 C 方法?【英文标题】:How can I call a C method from a library on my C# code? 【发布时间】:2014-05-20 15:46:54 【问题描述】:我有一个 DLL (CliSiTef32I.dll),我需要在我的 C# 代码上调用以下方法:
//The DLL can be downloaded at http://54.197.252.236/se/CliSiTef32I.dll
long ConfiguraIntSiTefInterativoEx(
char* IPSiTef,
char* IdLoja,
char* IdTerminal,
short Reservado,
char* ParametrosAdicionais
)
long IniciaFuncaoSiTefInterativo(
long Funcao,
char* Valor,
char* CupomFiscal,
char* DataFiscal,
char* HoraFiscal,
char* Operador,
char* ParamAdic
)
我该怎么做?
【问题讨论】:
如何执行此操作取决于您未提供的信息。什么是调用约定?是cdecl
吗? char*
参数是什么。它们是字符串吗?什么编码? ANSI? ASCII? UTF-8?它们是输入参数吗?还是他们输出?这似乎不太可能。
【参考方案1】:
这些可能会起作用:
[DllImport("CliSiTef32I.dll")]
public static extern int ConfiguraIntSiTefInterativoEx (
byte[] IPSiTef,
byte[] IdLoja,
byte[] IdTerminal,
short Reservado,
byte[] ParametrosAdicionais)
[DllImport("CliSiTef32I.dll")]
public static extern int IniciaFuncaoSiTefInterativo (
long Funcao,
byte[] Valor,
byte[] CupomFiscal,
byte[] DataFiscal,
byte[] HoraFiscal,
byte[] Operador,
byte[] ParamAdic)
不过,我并不完全确定 short
的含义。如果这是一个 16 位有符号整数,这将起作用。
此外,如果您返回的 32 位 int 确实是布尔值,您可以这样声明返回值。
【讨论】:
为什么要使用 byte[] 而不是 char[]? @Felipe 因为 c# char 不是 16 位,不像 c char 是 8 位。 那么,如何将c#字符串转换为byte[]? @Felipe 可能是Encoding.Default.GetBytes(somestring)
见msdn.microsoft.com/en-us/library/ds4kkd55.aspx 和msdn.microsoft.com/en-us/library/…
C++ long
是 C# int
。很可能所有char*
参数都简单地转换为string
。以上是关于如何从 C# 代码的库中调用 C 方法?的主要内容,如果未能解决你的问题,请参考以下文章