在所写的C#中要调用一别人开发的API,此API定义如下:本API为DELPHI开发的Windows平台DLL动态库,接口声明语法为Object Pascal
ObjectPascal与C的接口声明语法对照如下:
pchar 对应 char*
interger 对应 int
var integer 对应 int *
byte 对应 charfunction InitializeEsm(Esmser,Webser:pchar;SetTcp,Deliver:integer):integer;
C语法声明:
int InitializeEsm( char *Esmser,
char *Webser,
char *SocksPxy,
int SetTcp,
int Deliver)
我在C#里是这样用的,但是肯定是错误的,请教正确用法!
[DllImport("Es.dll")] //Es.dll为所调用api
public static extern int InitializeEsm(string Esmser,string Webser,int SetTcp,int Deliver);程序完整代码如下:
using System;
using System.Runtime.InteropServices; class MessageSend
{
[DllImport("Es.dll")]
public static extern int InitializeEsm(string Esmser,string Webser,int SetTcp,int Deliver);
public static void Main()
{
int iRes=InitializeEsm("123","456",0,0);
Console.WriteLine(iRes); }
}编译通过,但在程序运行时出错。
ObjectPascal与C的接口声明语法对照如下:
pchar 对应 char*
interger 对应 int
var integer 对应 int *
byte 对应 charfunction InitializeEsm(Esmser,Webser:pchar;SetTcp,Deliver:integer):integer;
C语法声明:
int InitializeEsm( char *Esmser,
char *Webser,
char *SocksPxy,
int SetTcp,
int Deliver)
我在C#里是这样用的,但是肯定是错误的,请教正确用法!
[DllImport("Es.dll")] //Es.dll为所调用api
public static extern int InitializeEsm(string Esmser,string Webser,int SetTcp,int Deliver);程序完整代码如下:
using System;
using System.Runtime.InteropServices; class MessageSend
{
[DllImport("Es.dll")]
public static extern int InitializeEsm(string Esmser,string Webser,int SetTcp,int Deliver);
public static void Main()
{
int iRes=InitializeEsm("123","456",0,0);
Console.WriteLine(iRes); }
}编译通过,但在程序运行时出错。
[DllImport("Es.dll")]
public static extern int InitializeEsm(
[MarshalAs( UnmanagedType.LPTStr )]string Esmser,
[MarshalAs( UnmanagedType.LPTStr )]string Webser,int SetTcp,int Deliver);如果是需要传出的话,可以如下
[DllImport("Es.dll")]
public static extern int InitializeEsm(
[MarshalAs( UnmanagedType.LPTStr )]StringBuilder Esmser,
[MarshalAs( UnmanagedType.LPTStr )]StringBuilder Webser,int SetTcp,int Deliver);Caution:
使用的时候,需要给参数初始化空间,例如:
StringBuilder Esmser = new StringBuilder( 256 );