c++中
struct madx_stat {
char msg[256];
size_t write_size;
int is_eof;
size_t readsize;
size_t remaining; // Will reference some
// "middle part" of in_buffer:
unsigned char *buffstart;
};extern "C" __declspec(dllexport) madx_sig __stdcall
madx_read ( unsigned char *in_buffer,
unsigned char *out_buffer, madx_house *mxhouse, madx_stat *mxstat)
{
.........
//########################################3
mxstat->readsize =10;
mxstat->remaining = 10;
return(MORE_INPUT);
//###############################3
.....
}
C#中
[StructLayout(LayoutKind.Sequential, Size = 276), Serializable]
public struct madx_stat
{ [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)]
public string msg;
public uint write_size;
public int is_eof;
public uint readsize;
public uint remaining;
public IntPtr buffstart; }
[DllImport("madxdllwm.dll")]
public static extern madx_sig
madx_read(IntPtr in_buffer,
IntPtr out_buffer, IntPtr mx_house, ref madx_stat mxstat);调用: mxSignal = Program.madx_read(inBufferPtr, outBufferPtr, mxHousePtr, ref mxStat);
在vs调试中发现我修改的两个值根本没有变化
又做测试,在c++中有代码
if ( (mxstat->readsize == 0) &&
(mxstat->remaining == 0) )
{...}
居然通不过,在调试器中可以看到readsize和remaining的值为0x00000000我的dll和c#程序都是在vs2008,windows mobile5的sdk中调试的。
谢谢各位
struct madx_stat {
char msg[256];
size_t write_size;
int is_eof;
size_t readsize;
size_t remaining; // Will reference some
// "middle part" of in_buffer:
unsigned char *buffstart;
};extern "C" __declspec(dllexport) madx_sig __stdcall
madx_read ( unsigned char *in_buffer,
unsigned char *out_buffer, madx_house *mxhouse, madx_stat *mxstat)
{
.........
//########################################3
mxstat->readsize =10;
mxstat->remaining = 10;
return(MORE_INPUT);
//###############################3
.....
}
C#中
[StructLayout(LayoutKind.Sequential, Size = 276), Serializable]
public struct madx_stat
{ [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)]
public string msg;
public uint write_size;
public int is_eof;
public uint readsize;
public uint remaining;
public IntPtr buffstart; }
[DllImport("madxdllwm.dll")]
public static extern madx_sig
madx_read(IntPtr in_buffer,
IntPtr out_buffer, IntPtr mx_house, ref madx_stat mxstat);调用: mxSignal = Program.madx_read(inBufferPtr, outBufferPtr, mxHousePtr, ref mxStat);
在vs调试中发现我修改的两个值根本没有变化
又做测试,在c++中有代码
if ( (mxstat->readsize == 0) &&
(mxstat->remaining == 0) )
{...}
居然通不过,在调试器中可以看到readsize和remaining的值为0x00000000我的dll和c#程序都是在vs2008,windows mobile5的sdk中调试的。
谢谢各位
解决方案 »
- 请问,c#的后台线程有什么意义
- winform下拉框TEXT和VALUE
- C#读取Excel(excel只读。有宏,函数计算值)内容
- 我现在在做一个C#下面的采集视频流的,懂directshow的进来下。
- datagridview控件显示数据
- WINFORM中有没有集中处理异常的类?
- 在C#中我重数据库中读到的数据放在arraylist类中,如何在页面上分页
- QQ收到新信息后,任务栏的图标一下黑一下正常是怎么做到的呢?
- DataGrid能不能直接进行添加、删除、修改类似于pb中的datawindow,如果不行一般怎么做?希望给点代码
- [请教]请问如何用C#生成二叉树
- 一个比较难弄的问题,希望大家帮一下我!!!!
- dataGridView表中的数据 与列不对应··咋办 C#
证明为空嘛
还有这些代码是一个开源的项目里的,是win32中的,我移到mobile里出的问题。