求这2个函数的C#原型

pzlin 2009-11-24 05:17:54
/////////////////////////////////////////////////////////////////////////////////////
// 函数功能:
// 列表所支持TOKEN的连接名称
// 函数参数:
// szTokenName: 输出参数,所有指定类型的TOKEN连接名称
// 不同的TOKEN之间以'\0'作为分割符
// pulTokenNameLen: 输入参数,szTokenName的缓冲区的最大长度
// 实际返回的总的连接名称的长度
// ulTokenType: 输入参数,连接类型
// pvReserved: 输入参数,保留扩展使用,目前只支持NULL
/////////////////////////////////////////////////////////////////////////////////////
long __stdcall MWTokenList(
char* szTokenName,
unsigned long * pulTokenNameLen,
unsigned long ulTokenType,
const void* pvReserved);
/////////////////////////////////////////////////////////////////////////////////////
// 函数功能:
// 连接一个TOKEN,获得TOKEN的操作句柄
// 函数参数:
// plTokenHandle: 输出参数,返回TOKEN的连接句柄
// szTokenName: 输入参数,所要连接TOKEN的连接名称,通过MWTokenList函数获得
// ulTokenMode: 输入参数,连接模式,是连接类型和共享模式的或关系
// pvReserved: 输入参数,保留扩展使用,目前只支持NULL
/////////////////////////////////////////////////////////////////////////////////////
long __stdcall MWTokenConnect(
long* plTokenHandle,
const char* szTokenName,
unsigned long ulTokenMode,
const void* pvReserved);

MFC里面的调用:


unsigned long ulTokenType;
unsigned long ulTokenMode;
unsigned long ulTokenNameLen;
char szTokenName[100];
long m_lTokenHandle;

lResult = MWTokenList(szTokenName,&ulTokenNameLen,ulTokenType,0);

lResult = MWTokenConnect(&m_lTokenHandle,szTokenName,ulTokenMode,0);

这是我在C#里面自己定义的原型

public static extern long MWTokenList(byte[] szTokenName, ref ulong pulTokenNameLen, ulong ulTokenType, string/long pvReserved);

public static extern long MWTokenConnect(ref long plTokenHandle, byte[] szTokenName, ulong ulTokenMode, string/long pvReserved);

调用都有问题

请大家帮忙想方法, 感谢ing

...全文
151 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
pzlin 2009-11-25
  • 打赏
  • 举报
回复
感谢以上几位的帮助我试试
wuyq11 2009-11-24
  • 打赏
  • 举报
回复
方法的参数和返回值的类型可能不同,对照表
C++ C#
char* string
传出的char* StringBuilder
short short
char byte
char[n] fixed byte[n]
结构指针 结构指针
函数指针 委托
结构体数组使用IntPtr

http://topic.csdn.net/u/20090225/15/a6bc50ad-9721-4749-b189-dc4a4bc045a1.html
jbo126 2009-11-24
  • 打赏
  • 举报
回复

[dllimport("dllname",CharSet=CharSet.Auto,CallingConvention=CallingConvention.Winapi]
public static extern int MWTokenList(string szTokenName, ref uint pulTokenNameLen, uint ulTokenType, IntPtr pvReserved);
[dllimport("dllname",CharSet=CharSet.Auto,CallingConvention=CallingConvention.Winapi]
public static extern int MWTokenConnect(ref int plTokenHandle, string szTokenName, uint ulTokenMode, IntPtr pvReserved);
lzsh0622 2009-11-24
  • 打赏
  • 举报
回复
把每个参数的数据类型一一对照好.

C++ C#
=====================================
WORD ushort
DWORD uint
UCHAR int/byte 大部分情况都可以使用int代替,而如果需要严格对齐的话则应该用bytebyte
UCHAR* string/IntPtr
unsigned char* [MarshalAs(UnmanagedType.LPArray)]byte[]/?(Intptr)
char* string
LPCTSTR string
LPTSTR [MarshalAs(UnmanagedType.LPTStr)] string
long int
ulong uint
Handle IntPtr
HWND IntPtr
void* IntPtr
int int
int* ref int
*int IntPtr
unsigned int uint
COLORREF uint

mohugomohu 2009-11-24
  • 打赏
  • 举报
回复
不知道是什么
sundotLei 2009-11-24
  • 打赏
  • 举报
回复
1,你的c++库是否允许c#调用.
2,方法的参数数据类型是否对应.

帮顶!

111,120

社区成员

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

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

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