c#调用外部动态连接库的问题

bilujun 2006-07-04 12:50:34
假设外部动态连接库的名称位Test.Dll
里面函数原型和结构定义如下
typedef struct structAAA
{
double aaa1;
int aaa2;
long aaa3;
} AAA;

typedef struct structBBB
{
char bbb1[6];
char bbb2[12];
} BBB;

typedef struct structCCC
{
AAA aaa;
BBB bbb;
}CCC;

void ReadData(CCC* data)
{
}
要在c#中调用ReadData函数,应该如何定义和使用
...全文
146 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Knight94 2006-07-04
  • 打赏
  • 举报
回复
动态加载?

struct结构是预知还是未知,如果是预知的话,struct部分不变,你用loadlibrary来动态加载你的dll,参看
http://www.codeproject.com/csharp/dyninvok.asp
bilujun 2006-07-04
  • 打赏
  • 举报
回复
谢谢neilwang(无)和Knight94(愚翁) ( )
如果我要动态加载,应该如何写呢,由于DLL文件名称现在是未知的.
aSalt 2006-07-04
  • 打赏
  • 举报
回复
up
rola 2006-07-04
  • 打赏
  • 举报
回复
关注
Knight94 2006-07-04
  • 打赏
  • 举报
回复
have a try
public struct structAAA
{
public double aaa1;
public Int16 aaa2;
public int aaa3;
}

public struct structBBB
{
[MarshalAs( Unmanaged.LPArray, SizeConst=6 )]
public byte[] bbb1;
[MarshalAs( Unmanaged.LPArray, SizeConst=12 )]
public byte[] bbb2;
};

public struct structCCC
{
public structAAA aaa;
public structBBB bbb;
};

[DllImport(...)]
public extern static void ReadData( ref structCCC data);
neilwang 2006-07-04
  • 打赏
  • 举报
回复
[StructLayout(LayoutKind.Sequential)]
public struct AAA
{
public double aaa1;
public int aaa2;
public long aaa3;
}

[StructLayout(LayoutKind.Sequential, CharSet=CharSet.Ansi)]
struct BBB
{
[MarshalAs(UnmanagedType.ByValTStr, SizeCount=6)]
public char[] bbb1;
[MarshalAs(UnmanagedType.ByValTStr, SizeCount=6)]
public char[] bbb2;
}

[StructLayout(LayoutKind.Sequential)]
struct CCC
{
public AAA aaa;
public BBB bbb;
}

[DllImport("Test.Dll")]
public static extern void ReadData(
[MarshalAs(UnmanagedType.LPStruct]
CCC data
);

111,119

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧