C 宏 里有如下几个函数 int OPENSSL_init(int mode);
void* OPENSSL_connect(Socket s); int OPENSSL_read(void* sslsock, void *buf, int num);
OPENSSL_write( void* sslsock, const void *buf,int num );
int OPENSSL_shutdown( void* sslsock );
void OPENSSL_uninit( );
当 宏 生成动态链接库 dll后
我在C# 里调用 //调用 SSL动态链接库 初始化函数
[DllImport("SSLLib.dll", EntryPoint = "OPENSSL_init")]
public extern int OPENSSL_init(int mode);
//调用 SSL动态链接库 连接函数
[DllImport("SSLLib.dll", EntryPoint = "OPENSSL_connect")]
public static extern void* OPENSSL_connect(Socket s);
//调用 SSL动态链接库 读取函数
[DllImport("SSLLib.dll", EntryPoint = "OPENSSL_read")]
public static extern int OPENSSL_read(void* sslsock, void* buf, int num);
//调用 SSL动态链接库 写入函数
[DllImport("SSLLib.dll", EntryPoint = "OPENSSL_write")]
public static int OPENSSL_write( void* sslsock, void *buf,int num );
//调用 SSL动态链接库 关闭函数
[DllImport("SSLLib.dll", EntryPoint = "OPENSSL_shutdown")]
public static extern int OPENSSL_shutdown( void* sslsock );
//调用 SSL动态链接库 注消SSL库,回收SSL库函数
[DllImport("SSLLib.dll", EntryPoint = "OPENSSL_uninit")]
public static extern void OPENSSL_uninit( );上面这样调用显然是会报错,指针和固定大小缓冲区只能在不安全的上下文中使用
那么应该怎样正确调用或者说应该怎样把C里的函数转换为c#里可以使用的?急用。万分感谢。希望大家帮帮忙
这个会有问题 - Socket不是基本类型,C#没有直接对应的类。
void* OPENSSL_connect(Socket s)这个函数是不是返回一个标记,就是自己定义了一个被连接的对象,可以是数字也可以是字符串或者结构体什么的,int OPENSSL_read(void* sslsock, void *buf, int num)这里面的sslsock指的就是connect函数所返回的对象?如果是这样的话,假定用数字来标记这个被连接的对象,可以改为以下的
int OPENSSL_init(int mode);
IntPtr OPENSSL_connect(IntPtr s);其中s是所要连接的socket的Handle,返回的IntPtr可以用Marshal.ReadInt32读取到一个整数标识。
int OPENSSL_read(IntPtr sslsock, Byte[] buf, int num);其中sslock是前面一个函数返回的IntPtr,buf是自己定义的一个数组,里面是要被写入接收数据的,num是接收长度。
OPENSSL_write(IntPtr sslsock, Byte[] buf,int num );参数同上,不过buf里面是要发送的数据。
int OPENSSL_shutdown(IntPtr sslsock );参数同上
void OPENSSL_uninit( );