繁体   English   中英

什么是C#等同于C ++句柄

[英]What is C# equivalent to C++ Handle

嗨,我需要帮助来了解什么等效于c#中的c ++句柄。 我需要调用此dll,并且提供的方法使用的是c ++,如下所示

HANDLE hCTAPI;
hCTAPI = ctOpen(NULL, NULL, NULL, 0);

if (hCTAPI == NULL)
    dwStatus = GetLastError();    // get error
else {
    ctTagWrite(hCTAPI, "SP123", "1.23");
    ctClose(hCTAPI);
}
// example of open for remote TCP/IP connection.
hCTAPI = ctOpen("203.19.130.2", "ENGINEER", "user", 0);

在我的C#代码中:

[DllImport(@"C:\Users\Admin\source\repos\WindowsFormsApp2\WindowsFormsApp2\dll\CtApi.dll")]
private static extern IntPtr ctOpen(string a, string b, string c, int d);

private void button1_Click(object sender, EventArgs e)
{
    IntPtr ptrObj = Marshal.AllocHGlobal(4);
    ptrObj = ctOpen("192.168.1.192", "Engineer", "00", 0);  
}

API应该返回一些东西。 当我为ptrObj调试值时始终为0

API参考

ctOpen(sComputer,sUser,sPassword,nMode)

我猜目标计算机已拒绝您的连接。

  1. 尝试使用GetLastError函数来检查错误。

  2. 尝试使用Process Monitor来查看您的应用程序尝试连接到的内容。 按进程名称过滤,然后监视TCP *事件,您应该看到目标IP和端口。

P / S:据我从CTAPI文档可以看出,您使用的PInvoke签名是正确的,因此这可能是CT安装/配置的问题。

HANDLE是一个无符号整数,表示指向资源的指针。

uint hCTAPI = ctOpen(NULL, NULL, NULL, 0);

应该为您工作。 它为您提供了指向您在案例中实例化的资源的指针。 当您要调用此资源的方法时,这些方法可能会要求hCTAPI是签名中的第一个(或最后一个)参数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM