当前位置:编程学习 > C#/ASP.NET >>

C#调用非托管DLL,当返回类型和参数为SOCKET应该怎样处理

非托管的dll(激光扫描仪的SDK)接口为
SOCKET ZLDS200_Connect(UDP_DevInfoBlock_PC * lpDevBlock) 
BOOL ZLDS200_GetReult(SOCKET sDevice, void * lpBuffer)

用int或者Intptr接收ZLDS200_Connect的返回值,再传入ZLDS200_GetReult时程序就卡死了,哪位大虾帮忙看下~十分感谢~ socket c# 非托管 --------------------编程问答-------------------- 自己顶下~,急用在线等~~~ --------------------编程问答-------------------- 1. 扔掉
2. 重新设计c++程序 --------------------编程问答-------------------- 扔不掉,接口是硬件厂商提供的,没法修改 --------------------编程问答-------------------- 你用intptr的时候函数有返回值或异常吗? --------------------编程问答-------------------- 有返回值,没有异常 --------------------编程问答-------------------- 用这个Marshal.GetLastWin32Error()看看返回值,再看看什么情况。 --------------------编程问答-------------------- c#程序会自动回收,可以用个关键字fix固定获取到的引用地址 --------------------编程问答-------------------- 查下SOCKET 是不是宏定义?头文件都没有?
让硬件厂商提供下demo啊 --------------------编程问答-------------------- typedef u_int           SOCKET;
typedef unsigned int    u_int;

用int接收ZLDS200_Connect的返回值应该没有问题,估计是参数传递的问题。 --------------------编程问答-------------------- 看看这个SOCKET是怎么定义的,若是结构体的话,你定义一个和他的结构一样的结构体来接收数据,基本类型的话就更加简单了
总之一个原则,定义和他一样的内存结构的类型来接收数据 --------------------编程问答-------------------- 楼主你这个算是好的了,只是定义到处转了一下,比我的好多了,买个设备,打开就用了1个结构体,里面有几十个参数,和3个子结构体;次奥,光敲哪些没有的代码都要好久。。。。

typedef u_int           SOCKET;
typedef unsigned int    u_int;

这个SOCKET应该是UINT类型的,不过C的应该和C#的长度有不同,这样可能导致内存读取到不应该读的位置,会报异常的。。。 --------------------编程问答-------------------- 我后来用的方法是在程序里面开了个监听数取数据,不用他的接口函,觉得七#strife说的应该是可以试试的,我在接收的时候没有问题,再传递给ZLDS200_GetReult的时侯,可能是自动回收造成的连接不到。11#mt_chenwenhui说的也有道理,之前一个运动控制卡的DLL有过这种问题,C和C#的同一个类型长度有不同,现在悲催的传感器返厂了,等回来的时候试一下再给大家散分,谢谢各位~ --------------------编程问答-------------------- SOCKET  他在 C++ 种是结构体的话 你就 自己用 C# 重写这个结构体。然后加上 非托管可以识别的相关 
【Attribute】
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,