关于SO的问题有很多疑问.解决方案是设置
notifyIcon.icon = null
并Dispose
在FormClosing事件中调用它.
在我的应用程序中,没有这样的表单,但有通知图标更新事件.在创作时,我隐藏了我的形式并制作了ShowInTaskbar
财产false
.因此,我不能有"FormClosing"或"FormClosed"事件.
如果此应用程序获取退出事件,则调用Process.GetCurrentProcess().Kill();
退出.
我notifyIcon.icon = null
在杀戮之前添加了Dispose,但仍然将图标保留为任务栏,直到我将鼠标悬停在它上面.
编辑:如果我认为这种行为是由于调用GetCurrentProcess().Kill()
,是否有任何优雅的方式退出应用程序,这将清除所有资源并从系统托盘中删除图标.
我在我的代码中使用C++编写的API(用C#编写).API需要一个参数作为指向结构的指针.结构由"Int"和Char Arrays组成:例如
unsafe public struct ToBePassed
{
Int32 Num1;
Int32 Num2;
Char[] Data; // or fixed Char Data[255];
}
Run Code Online (Sandbox Code Playgroud)
我不能直接将结构指针传递给API,因为在这种情况下,我收到错误,因为"指针不能引用Marshaled结构".代码编译成功但是当我执行(调试)代码时会出现此错误.
现在我有两个选择:第一: - 通过参考传递结构:我想问一下当我通过ref传递结构时,需要结构指针的API是否可以接收地址.请注意,API将在"Char [] Data"中返回Data.
第二: - 使用Marshal.StructureToPtr:这会将结构指针转换为IntPtr.怀疑是相同的,API会正确接收吗?
谢谢你的时间!
此致,Swanand
如果我宣布一个联盟:
union TestUnion
{
struct
{
unsigned int Num;
unsigned char Name[5];
}TestStruct;
unsigned char Total[7];
};
Run Code Online (Sandbox Code Playgroud)
现在,我怎么知道是使用了Total [7]还是使用了TestStruct?
我在用C!我正在重新审视工会和结构,我想到了这个问题." sizeof
"不能用,因为它们都是相同的大小,即7个字节.(还有另一个问题)
当我只用字符'a'和Tried填充"Total"时sizeof(TestUnionInstance)
,它返回12(Char的大小是1字节,对吗?).所以我从中分离出结构,发现结构的大小是12个字节而不是5 + 2 = 7个字节....奇怪!! 谁能解释一下?
PS我正在使用Visual Studio 2008.
当我在阅读StackOverflow上的DLL时,我偶尔会遇到"Native DLLs"这个词.我发现了有关它们的问题,但我无法理解"本机DLL"究竟是什么.
什么是本机DLL?
这个错误导致了我的培训计划.
每次我在我的VS2010中创建任何C++应用程序时,它在我的机器上运行正常,但如果我在不同的机器上运行它,它会从这个错误开始.如果我在系统文件夹中复制msvcp100.dll然后它为其他DLL喊叫,则会出现错误.它需要5-6个不同的DLL.
即使我编写一个简单的基于控制台的Addition程序,最烦人的部分也是如此,它给出了这个错误.(我不应该)我会同意如果我设计一些花哨的形式和所有......但对于简单的加法程序????
我错过了设置中的某些内容吗?还是VS2010要责怪?
有点相关的问题:这个但是这个问题似乎有所不同
我想检测通过在后台运行但没有GUI的C++应用程序插入/删除特定(自定义)USB设备.
我已经看到很多问题,他们的解决方案RegisterDeviceNotification
也在MSDN上提供代码示例
但是这些应用程序都有一些Window/Form/GUI.我的申请没有.我如何在我的应用程序中使用它?
我的最后一个选择是创建一个看不见的窗口......但还有其他出路吗?
我想制作一个计算传递数组大小的FUNCTION.
我将传递一个数组作为输入,它应该返回它的长度.我想要一个功能
int ArraySize(int * Array /* Or int Array[] */)
{
/* Calculate Length of Array and Return it */
}
void main()
{
int MyArray[8]={1,2,3,0,5};
int length;
length=ArraySize(MyArray);
printf("Size of Array: %d",length);
}
Run Code Online (Sandbox Code Playgroud)
长度应该是5,因为它包含5个元素,虽然它的大小是8(即使8会做,但5会很好)
我试过这个:
int ArraySize(int * Array)
{
return (sizeof(Array)/sizeof(int));
}
Run Code Online (Sandbox Code Playgroud)
这将无效,因为" sizeof(Array)
"将重新调整Int指针的大小.这个" sizeof
"只有你在同一个功能时才有效.
实际上我从C#开始很多天回到C所以我不记得了(和失踪Array.Length()
)
问候!
我有一个表单(使用VS2010在C#中开发)和一个进度条.这是一种秒表形式,我填写进度条说10secs ....随着时间流逝,进度条相应填充....意味着5secs后,进度条将填充50%等等....
我使用for循环来执行此操作: -
for(int count=0;count<200;count++)
{
progbar.performstep();
progbar.update();
update();
Thread.Sleep(50);
}
Run Code Online (Sandbox Code Playgroud)
我使用了50毫秒的Thread.Sleep,以便进度条顺利更新.持续1秒,它会逐步递增.
问题是,如果我做任何其他操作,如移动此表单,甚至点击桌面上的另一个图标使这个表单"无响应"....但它执行操作,并在10秒结束时,它重新获得它的状态并显示弹出,表示进度条已满10秒.
感谢您的帮助和抱歉使用这种复杂的语言.
此致,Swanand
更新:我在下面的答案的帮助下解决了这个问题....我要知道的一个常见错误就是忘记了" Applications.DoEvents()
"以及" update()
"......如果你进入这一行,那么"被绞死"的机会就会减少!
可能重复:
逻辑比较:是否保证从左到右的评估?
我被告知,对于每个C函数参数,最右边的参数将首先执行/处理,然后向左进展.右侧部分将首先执行,然后向左前进.
这适用于像&&和||这样的条件 ??
如果我正在编写C++代码,我首先检查NULL condtion然后在下一步检查我是否执行了我的操作.例如
if( CommDevice != NULL)
{
if(CommDevice->isOpen == TRUE)
{
//Do Something
}
}
Run Code Online (Sandbox Code Playgroud)
我可以转换吗 if((CommDevice != NULL) && (CommDevice->isOpen == TRUE) )
"代码从右到左执行"恐惧正在阻止我,因为如果CommDevice
是NULL,我试图访问NULL的成员.它会产生异常.
我正在开发一个App,它有多个线程等待来自DLL和串行端口的不同输入.
我想添加一个功能,在机器进入睡眠之前,我必须卸载某些DLL并且在唤醒时必须重新加载DLL.为此,我需要获得有关睡眠和唤醒的通知.
我发现很多关于在C#中做的文件,但我想用C++做这件事.
我尝试使用此代码项目,但无法捕获任何事件.我删除了与Window Paint和All相关的所有内容,因为我不需要它的GUI并且仅保留main message loop (The While loop in the main)
编辑:-
我用它作为我的主循环: -
// Start the message loop.
while( (bRet = GetMessage( &msg, NULL, 0, 0 )) != 0)
{
if (bRet == -1)
{
// handle the error and possibly exit
}
else
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
Run Code Online (Sandbox Code Playgroud)
坦率地说,我从CodeProject复制了这个,并且只从MSDN文章中制作了一个修改即Checked GetMessage(..)!= 0.
我错过了什么吗?
或任何其他解决方案?
我正在使用VS2010并使用C++编程
提前致谢!
c ×3
c# ×3
c++ ×3
arrays ×1
dll ×1
if-statement ×1
marshalling ×1
msvcr100.dll ×1
native ×1
notifyicon ×1
struct ×1
unions ×1
usb ×1
winapi ×1
windows ×1
winforms ×1