EvtOpenSession函数求大神分析?

PCCYC 2016-02-18 05:46:46
原型:

EVT_HANDLE WINAPI EvtOpenSession(
_In_ EVT_LOGIN_CLASS LoginClass,
_In_ PVOID Login,
_In_ DWORD Timeout,
_In_ DWORD Flags
);

第二个参数官方是这样说的:
Login [in]
A EVT_RPC_LOGIN structure that identifies the remote computer that you want to connect to, the user's credentials, and the type of authentication to use when connecting.

关于这个LOGIN结构体是:

typedef struct _EVT_RPC_LOGIN {
LPWSTR Server;
LPWSTR User;
LPWSTR Domain;
LPWSTR Password;
DWORD Flags;
} EVT_RPC_LOGIN;


很奇怪,为什么第二个参数不直接_EVT_RPC_LOGIN Login,而用了PVOID类型?小弟尝试在C#中用了多种方法想实现这个函数均得不到正确的句柄,我可以确定就是第二个结构体没彻底搞正确 ,有无高手帮我猜测下在C#中怎么解决这个问题呢?谢谢

小弟C#是这样定义的:

[DllImport("Wevtapi.dll", CharSet = CharSet.Unicode)]
public static extern IntPtr EvtOpenSession(
int LoginClass_EvtRpcLogin_1, //EvtRpcLogin 1
IntPtr Login, //改成 _EVT_RPC_LOGIN 也不行
int Timeout, //Reserved. Must be zero.
int Flags //Reserved. Must be zero.
);
public struct _EVT_RPC_LOGIN { //改成class也不行
public string Server;
public string User;
public string Domain;
public string Password;
public int Flags; // _EVT_RPC_LOGIN_FLAGS
}

问题原因找到了还可以多给分,非常感谢。
...全文
182 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
liquoryellow 2016-02-18
  • 打赏
  • 举报
回复
public struct _EVT_RPC_LOGIN { //改成class也不行 public string Server; public string User; public string Domain; public string Password; public int Flags; // _EVT_RPC_LOGIN_FLAGS 不是把C++的结构体转成C#代码就行吧,你得把C++的那个结构体给C#用,然后传C++的那个结构体才行。 不然类型能一样么。 很久没搞了,感觉问题应该是这样。
代码下载链接: https://pan.quark.cn/s/b27638adc362 在工业自动化监控领域中,WinCC 被视为一种常用的可视化软件,其功能在于构建人机界面(HMI)以及SCADA系统。本资料将阐释在WinCC环境下如何构建一个展现管道中流体流动的动态效果,此功能主要通过C动作脚本来完成。在此过程中,我们需要构建两个矩形,分别标记为 rec1 和 rec2。这两个矩形的高度相等,但 rec1 的宽度要小于 rec2。在具体实施时,rec1 将作为展示流体运动的可见单元,而 rec2 则作为辅助元素,尽管其“显示”属性被设为关闭,但在程序执行期间,其属性参数对流体动画的表现起着决定性作用,因为 rec2 与 rec1 的宽度差将决定流体每次移动的长度。 随后,我们需要将 rec1 和 rec2 整合为一个自定义对象。在自定义对象的属性配置中,应包含 rec1.Left、rec1.Width、rec1.Visible 和 rec2.Width 这些核心属性。这些属性将有助于在C脚本中精确控制对象的位置和可见状态,以达成流体运动的视觉效果。同时,用户可根据实际需增加其他属性,以增强自定义对象的功能性。 在自定义对象的C脚本部分,我们设定了一个周期为“250ms”的触发器。该脚本的核心职责是计算并更新流体块的位置。借助 GetPropBOOL、GetPropWord 和 GetLeft 函数,我们可以获取对象的当前状态,涵盖其可见性、位置及宽度等参数。在循环操作中,流体块(rec1)将向右移动 rec2 - rec1 的距离,一旦流体块移出显示范围(即 rec1 的右边界达到或超过 rec2 的左边界),它将重新回到起始位置,从而形成流体持续流动的模...

111,129

社区成员

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

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

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