标签: handle

声明和初始化的问题

我正在尝试重写我之前编写的代码.该代码使用cplex Concert API;

#include <ilcplex/ilocplex.h>
    using namespace std;
    ILOSTLBEGIN

    int main(){

    IloEnv env;
    IloModel model(env);
    IloVarArray x(env);
    IloCplex cplex(model);

    return 0;
    }
Run Code Online (Sandbox Code Playgroud)

这段代码(尽管它没有做任何事情)有效...但是现在我已经实现了我自己的类,并且希望能够使用这些函数,但我不知道如何对它们进行初始化.所以这次我把它们写成了一个名为solver的不同类.

    //solver.h
    #ifndef solver_h
    #define solver_h
    #include <ilcplex/ilocplex.h>
    class solver{
    public:
        IloModel model;
     IloNumVarArray x;
     IloRangeArray con;
     IloCplex cplex;
     solver();
    solver~();

    };

#endif
Run Code Online (Sandbox Code Playgroud)

然后是cpp文件

//solver.cpp
    #include <ilcplex/ilocplex.h>
    #include <vector>
    using namespace std;
    #include "solver.h"
    ILOSTLBEGIN
    solver::solver(){
    IloEnv env;
    IloModel model(env);
    IloVarArray x(env);
    IloCplex cplex(model);
    }
Run Code Online (Sandbox Code Playgroud)

如果我向这个类添加一个函数,例如一个调用x.add(IloNumVar(env))的函数; 在第一个例子中,这会向x(数组)添加一个变量,但是当我将它放在另一个类中时,我会抓住"tring实现空句柄"......

我知道我在主程序中正在做的一切,如果我在h.file中没有不同的Cplex类,我也可以使用它但是我只能使用相同的模型一次,我想调用它相同型号几次.

在h.file中是否存在明显错误(除了缺少代码,析构函数等)?

c++ handle

0
推荐指数
1
解决办法
680
查看次数

在ActionBar android上获取ActionItem的句柄

我想要处理其中一个菜单项(我用XML声明这个).

    <item android:id="@+id/menu_shape_shifter"
    android:title="@string/menu_search"
    android:icon="@drawable/ic_action_refresh"
    android:orderInCategory="0"
    android:visible="true"
    android:showAsAction="always" />
Run Code Online (Sandbox Code Playgroud)

所以我这样做, MenuItem item_shape_shifter = (MenuItem)findViewById(R.id.menu_shape_shifter); 但它失败并出现异常:ClassCastException:com.android.internal.view.menu.ActionMenuItemView无法强制转换为android.view.MenuItem.

如果没有获得此菜单项的句柄,我无法继续.但是,找不到任何线索.

注意:我正在使用Action Bar兼容包,因为我支持的版本<3.0

android handle menuitem classcastexception android-actionbar

0
推荐指数
1
解决办法
779
查看次数

SysInternals处理打开时不显示我的.txt文件

我正在编写一个与锁定文件一起使用的Windows shell脚本.为了知道某个文件是否被锁定,我正在测试来自SysInternalsHandle*实用程序,根据其文档:

«Handle是一个实用程序,显示有关系统中任何进程的打开句柄的信息.您可以使用它来查看打开文件的程序»

所以我通过创建一个简单的.txt文件来尝试:

C:\Windows\system32>echo Foo >> Foo.txt
C:\Windows\system32>notepad Foo.txt
Run Code Online (Sandbox Code Playgroud)

(记事本显示在屏幕上,其中包含一个名为的新文件Foo.

C:\Windows\system32>handle Foo

Handle v3.51
Copyright (C) 1997-2013 Mark Russinovich
Sysinternals - www.sysinternals.com

No matching handles found.
Run Code Online (Sandbox Code Playgroud)

这里发生了什么?我的文件应该是打开的,记事本应该有一个句柄,但这一行:

handle -p notepad | grep "Foo"
Run Code Online (Sandbox Code Playgroud)

没有结果.
如何使用句柄来了解我的Foo.txt文件是否正在使用(锁定)?
也许有人可以给我一些使用句柄的例子.

windows shell file-io locking handle

0
推荐指数
1
解决办法
1063
查看次数

GetProcessId返回零

我有一个充满进程句柄的数组,现在我正在尝试获取每个进程句柄的相关进程ID.

但是,我的所有Process ID都回归零.任何人都能指出我错过了哪个明显的问题?

非常感谢

'child'数组填充了进程ID,因此:

currChild = FindWindowEx(hParent, prevChild, null, null);
Run Code Online (Sandbox Code Playgroud)

然后我尝试获取进程ID:

for (int i = 0; i < children.Count; ++i)
 {
      handle = children[i];
      pid = GetProcessId(handle);
      Console.WriteLine(children[i].ToString("X") + " : " + pid.ToString());
Run Code Online (Sandbox Code Playgroud)

API:

[DllImport("user32.dll", EntryPoint = "FindWindowEx", CharSet = CharSet.Auto)]
   static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow);
[DllImport("kernel32.dll", EntryPoint = "GetProcessId", CharSet = CharSet.Auto)]
    static extern int GetProcessId(IntPtr handle);
Run Code Online (Sandbox Code Playgroud)

输出:

2417E2 : 0
B20D9A : 0
48108C : 0
8809D6 : 0
B5140E …
Run Code Online (Sandbox Code Playgroud)

c# pid handle

0
推荐指数
1
解决办法
888
查看次数

为什么 DestroyWindow() 不释放我的代码中的内存?

这是我的代码:

#include <windows.h>
#include <iostream>
using namespace std;

int main(void) {
    cin.get();    //MEMORY SNAP
    HWND win = CreateWindow(
        "static",
        NULL,
        WS_CHILD | WS_VISIBLE | SS_BITMAP | WS_DISABLED,
        NULL,
        NULL,
        NULL,
        NULL,
        GetConsoleWindow(),
        (HMENU)0,
        GetModuleHandle(0),
        NULL
        );
    cin.get();    //MEMORY SNAP
    DestroyWindow(win);
    cin.get();    //MEMORY SNAP
}
Run Code Online (Sandbox Code Playgroud)

基本上我只是创建一个窗口然后销毁它。所以窗口分配的所有内存都应该被释放,但我的内存看起来像这样 - > http://oi67.tinypic.com/2rwrsxc.jpg 它不会被完全删除,我不知道为什么。

如果你能帮我解决这个问题,我会非常高兴。


图片来自链接:

在此输入图像描述

c++ windows handle

0
推荐指数
1
解决办法
442
查看次数

如果它是从Windows上的另一个进程生成的,我可以关闭进程自己的句柄吗?

我有一个调用该函数的进程CreateProcess(),但是我从不CloseHandle()从父进程调用,因为我不知道用户什么时候会退出子进程.这会导致某种泄漏还是没问题,因为当子进程关闭时,它会释放所有资源?

c++ winapi handle

0
推荐指数
1
解决办法
494
查看次数

确定文件HANDLE是否为管道句柄

在一个特定的函数中,我收到一个文件HANDLE,我想检查这个文件句柄是否是真正的磁盘文件句柄而不是管道句柄.保证它可以是磁盘文件句柄,也可以是管道句柄而不是任何其他类型的句柄.

我该怎么做?

void ProcessHandle(HANDLE hFile)
{
       // Process only if disk file handle
}
Run Code Online (Sandbox Code Playgroud)

函数GetFileInformationByHandle将检索文件句柄信息,如果句柄是管道句柄,则会失败,如下所述:

此句柄不应是管道句柄.

但是,它需要一个大型结构(BY_HANDLE_FILE_INFORMATION)并填充信息.我不是在寻找这些详细信息,因此使用此功能会带来性能损失.

c c++ windows winapi handle

0
推荐指数
1
解决办法
395
查看次数

Windows 上 Strawberry 上的 Perl 程序需要“使用 POSIX”才能评估 &lt;$sock&gt; 并从端口读取数据包

Perl 程序读取 UDP 数据包并清理数据并传输到另一个端口。
如果没有use POSIX;在程序中,它就不能变成<$sock>数据包。

`$sock` comes from:
Run Code Online (Sandbox Code Playgroud)
`$sock` comes from:
Run Code Online (Sandbox Code Playgroud)

数据正确输入use POSIX

!AIVDM,1,1,,B,37Oms:?Oh0bHEEMb=j5A5AtL00N0,0*76" (AIS data)
without that, <$data> appears as "GLOB(0x1563bcda6e8)
Run Code Online (Sandbox Code Playgroud)

PERldocs“强烈反对”使用“use POSIX;” https://perldoc.perl.org/POSIX

    socket($sock, PF_INET, SOCK_DGRAM, getprotobyname('udp'))
    bind($sock, $sockets[0])
Run Code Online (Sandbox Code Playgroud)

应该从套接字给我数据,不带use POSIX; 此时它挂起。

windows perl posix handle

0
推荐指数
1
解决办法
63
查看次数

如何在C中的最后一行之前添加一行

嗨,我在Unix平台上的C工作.请告诉我如何在C的最后一行之前追加一行.我在附加模式中使用了fopen但是我不能在最后一行之前添加一行.

我只想写入文件中的倒数第二行.

c file handle

-1
推荐指数
1
解决办法
764
查看次数

C++为什么Sendmessage不起作用?

在C#中,此SendMessage函数成功提高了音量:

[DllImport("user32.dll")]
public static extern IntPtr SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam);

SendMessage(Handle, 0x319, (int)Handle, APPCOMMAND_VOLUME_UP);
Run Code Online (Sandbox Code Playgroud)

但是在C++中,这个SendMessage函数不起作用,即卷不会上升:

// HWND hwnd = CreateWindow(...
SetWindowText(hwnd, "Hi"); // Worked
SendMessage(hwnd, WM_APPCOMMAND, (int)hwnd, APPCOMMAND_VOLUME_UP); // Don't work
Run Code Online (Sandbox Code Playgroud)

我错了什么?你能帮我解决一下吗?谢谢!

完整代码:

#include <windows.h>
HHOOK _hhook;
HWND hwnd;
HINSTANCE _hInstance;

KBDLLHOOKSTRUCT kbdStruct;

LRESULT __stdcall HookCallback(int nCode, WPARAM wParam, LPARAM lParam)
{
    if (nCode >= 0)
    {
        if (wParam == WM_KEYDOWN)
        {
            // lParam is the pointer to the struct containing the data needed, so cast …
Run Code Online (Sandbox Code Playgroud)

c++ winapi hwnd handle sendmessage

-2
推荐指数
1
解决办法
4277
查看次数