调用总是报错。快急死了啊~~~~。附件里有我写的调用程序,里面有那个DLL文件
这是那个函数的说明:
---------------------------------------------------------------------------------------------------------------------------------
long LEDAPI LED_Open(const PDeviceParam param, long Notify, long Window, long Message);
该函数打开一个指定的通讯设备
参数:
param:
一个设备参数指针,该结构如下定义:
typedef struct DEVICEPARAM{
long devType; //device type
long speed; //speed only use for rs232
long locPort; //rs232: COM port UDP: local port
long rmtPort; //remote port only use for UDP
long reserved[8];
}TDeviceParam;
typedef TDeviceParam * PDeviceParam;
devType:
0: 通讯设备为RS-232
1: 通讯设备为UDP
Speed:
仅对RS-232有效,一般情况下主板的速度为 SBR_57600
locPort:
对RS-232设备,该参数为串口号
对UDP设备,该参数为本地端口号,一般该值为大于1024的数字
Remote:
仅对UDP方式有效,主板的固定端口为: 6666
reserved:
系统保留Notify:
是否产生通知消息
1=产生通知消息
0=不产生通知消息
window:
接收通知消息的窗口句柄
Message:
消息标识
------------------------------------------------------------------------------------------------------------------------------我是这样调用的
-------------------------------------------------------------------------------------------------------------------------------
public struct LEDDevice //数据结构
{
public long devType; //设备类型:0(通讯设备为RS-232);1(通讯设备为UDP)
public long speed; //波特率:仅对RS-232有效,一般情况下主板的速度为 57600
public long locPort; //端口号:对RS-232设备,该参数为串口号;对UDP设备,该参数为本地端口号,一般该值为大于1024的数字
public long rmtPort; //仅对UDP方式有效,主板的固定端口为: 6666
[MarshalAs(System.Runtime.InteropServices.UnmanagedType.ByValArray, SizeConst = 5)]
public long[] reserved; //系统保留
} /////////////////////////////函数声明
[DllImport("LEDSender.dll", EntryPoint = "LED_Open", CharSet = CharSet.Unicode)]
public static extern int LED_Open(LEDDevice param, long Notify, long Window, long Message); private void Form1_Load(object sender, EventArgs e)
{
LEDDevice param;
//初始化设备类型参数
param.devType = 1;//COM方式
param.speed = 57600;//波特率
param.locPort = 5;//串口号
param.rmtPort = 6666;
param.reserved = new long[] { }; int result = LED_Open(param, 1, 1, 1);/////调用
}
-------------------------------------------------------------------------------------------------------------------------------请问函数中的各个变量该如何来赋值呢?万分感谢啊!!!
这是那个函数的说明:
---------------------------------------------------------------------------------------------------------------------------------
long LEDAPI LED_Open(const PDeviceParam param, long Notify, long Window, long Message);
该函数打开一个指定的通讯设备
参数:
param:
一个设备参数指针,该结构如下定义:
typedef struct DEVICEPARAM{
long devType; //device type
long speed; //speed only use for rs232
long locPort; //rs232: COM port UDP: local port
long rmtPort; //remote port only use for UDP
long reserved[8];
}TDeviceParam;
typedef TDeviceParam * PDeviceParam;
devType:
0: 通讯设备为RS-232
1: 通讯设备为UDP
Speed:
仅对RS-232有效,一般情况下主板的速度为 SBR_57600
locPort:
对RS-232设备,该参数为串口号
对UDP设备,该参数为本地端口号,一般该值为大于1024的数字
Remote:
仅对UDP方式有效,主板的固定端口为: 6666
reserved:
系统保留Notify:
是否产生通知消息
1=产生通知消息
0=不产生通知消息
window:
接收通知消息的窗口句柄
Message:
消息标识
------------------------------------------------------------------------------------------------------------------------------我是这样调用的
-------------------------------------------------------------------------------------------------------------------------------
public struct LEDDevice //数据结构
{
public long devType; //设备类型:0(通讯设备为RS-232);1(通讯设备为UDP)
public long speed; //波特率:仅对RS-232有效,一般情况下主板的速度为 57600
public long locPort; //端口号:对RS-232设备,该参数为串口号;对UDP设备,该参数为本地端口号,一般该值为大于1024的数字
public long rmtPort; //仅对UDP方式有效,主板的固定端口为: 6666
[MarshalAs(System.Runtime.InteropServices.UnmanagedType.ByValArray, SizeConst = 5)]
public long[] reserved; //系统保留
} /////////////////////////////函数声明
[DllImport("LEDSender.dll", EntryPoint = "LED_Open", CharSet = CharSet.Unicode)]
public static extern int LED_Open(LEDDevice param, long Notify, long Window, long Message); private void Form1_Load(object sender, EventArgs e)
{
LEDDevice param;
//初始化设备类型参数
param.devType = 1;//COM方式
param.speed = 57600;//波特率
param.locPort = 5;//串口号
param.rmtPort = 6666;
param.reserved = new long[] { }; int result = LED_Open(param, 1, 1, 1);/////调用
}
-------------------------------------------------------------------------------------------------------------------------------请问函数中的各个变量该如何来赋值呢?万分感谢啊!!!
你报的什么错都没说
报异常:
尝试读取或写入受保护的内存。这通常指示其他内存已损坏。
你要用marshal,读一下相关资料参数范围,应该在头文件里面有
比如那个message,应该在头文件中定义有:#define msg_ok 10000 + 24