分享

类型的已垃圾回收委托进行了回调

 空城66 2014-12-08
标签: 

c

 

应用程序

 

路径

 

杂谈

分类: VC/CPP/C

 #include <shlwapi.h>

 #pragma comment(lib, 'shlwapi.lib')

 TCHAR szFilePath[MAX_PATH] = {0};
 DWORD dwError = GetModuleFileName(NULL, szFilePath, ARRAYSIZE(szFilePath));
 if(dwError > 0)
 {
  PathRemoveFileSpec(szFilePath);
  printf(_T('The App path is: %s\n'), szFilePath);
 }
 else
 {
  printf(_T('GetModuleFileName error\n'));
 }

 

阅读(609) ┆ 评论(4) ┆ 转载(0) ┆ 收藏(0)

在C#中,有时会用到非托管代码(比如C++)定义的函数接口等,而有些函数是带有回调的。这时通常我们需要在托管代码(C#)中通过委托的方式实现此回调函数。但是有时就会碰到下面这样的错误:

 

检测到 XXXXXXXX::Invoke”类型的已垃圾回收委托进行了回调。这可能会导致应用程序崩溃、损坏和数据丢失。向非托管代码传递委托时,托管应用程序必须让这些委托保持活动状态,直到确信不会再次调用它们。

 

一般只调用一次回调函数时,不会出现这种情况。出现这种情况,是由于多次调用了回调函数,而且回调函数是在局部被new出来的。要避免这个错误的发生,需要将回调函数实例化为成员变量,这样就不会被垃圾回收了。

比如:

     class A
    {
        public delegate void ACallback(String msg);

        public void FuncA(ACallback callback, String msg)
        {
         &n

阅读(557) ┆ 评论(1) ┆ 转载(0) ┆ 收藏(0)
标签: 

杂谈

分类: VC/CPP/C

函数原型:

BOOL WINAPI CreateProcess(

    __in      LPCTSTR lpApplicationName,

    __in_out  LPTSTR lpCommandLine,

    __in      LPSECURITY_ATTRIBUTES lpProcessAttributes,

    __in      LPSECURITY_ATTRIBUTES lpThreadAttributes,

    __in      BOOL bInheritHandles,

    __in      DWORD dwCreationFlags,

    __in      LPVOID lpEnvironment,

    __in      LPCTSTR lpCurrentDirectory,

    __in      LPSTARTUPINFO lpStartupInfo,

    __out     LPPROCESS_INFORMATION lpProcessInformation,

);

请注意:第二个参数的类型是LPTSTR,而不是LPC

阅读(206) ┆ 评论(0) ┆ 转载(0) ┆ 收藏(0)
标签: 

杂谈

分类: VC/CPP/C

1. 如果是启动一个新的进程显示一个窗口,可以如下实现:

 STARTUPINFO si = {0};
 si.cb = sizeof si;
 si.dwFlags = STARTF_USESHOWWINDOW;
 si.wShowWindow = SW_SHOWNOACTIVATE;
 PROCESS_INFORMATION pi = {0};
 TCHAR path[MAX_PATH] = _T('notepad.exe');
 CreateProcess(NULL, path, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);

2. 如果是在当前程序显示一个非模态的对话框而不激活该窗口的话。

假设当前项目是一个对话框程序,CTestDlg类为主对话框,当点击CTestDlg的确定按钮的时候显示不激活的对话框CNoActiveDlg,则:

在CTestDlg类中定义CNoActiveDlg *m_dlgNoActive

在CTestDlg的OnInitDialog()中创建对话框:

m_dlgNoActive = new CNoActiveDlg();
m_dlgNoActive->Create(IDD_DLG_NO_ACTIVE);

在CTestDlg的OnOk()中:

m_dlgNoActive->ShowWindow(SW_SHOWNOACTIVATE);

这样当点击CTestDlg的确定按钮时,就会显示CNoActiveDlg窗口且此窗口未激活,激活窗口依然是CTestDlg。

 

阅读(991) ┆ 评论(0) ┆ 转载(0) ┆ 收藏(0)
标签: 

杂谈

分类: VC/CPP/C

如果想让资源管理器(explorer)每次打开一个文件夹时都启用新的窗口,可以使用如下方式:

    c++:

        ShellExcute(NULL, 'explore', 'c:\\', NULL, NULL, SW_SHOWNORMAL);

    c#:

        Win7:

        System.Diagnostics.Process.Start('explorer.exe', @'c:\');

        xp:

        还未找到方法

如果想让资源管理器(explorer)每次打开一个文件夹时,如果该文件夹已经打开,则只显示已打开的文件夹,而不是新起一个窗口,可以使用如下方式:

    c++:

        ShellExcute(NULL, 'open', 'c:\\', NULL, NULL, SW_SHOWNORMAL);

        或者

        ShellExcute(NULL, NULL, 'c:\\', NULL, NULL, SW_

阅读(88) ┆ 评论(0) ┆ 转载(0) ┆ 收藏(0)
标签: 

杂谈

分类: WPF/C#

效果


代码片段:

Window1.xaml文件

<Window x:Class='CheckBoxTreeView.Window1'
    xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation'
    xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml'
    xmlns:l='clr-namespace:CheckBoxTreeView'
    Title='Window1' Height='300' Width='300'>
    <Window.Resources>
        <Resou

阅读(1916) ┆ 评论(0) ┆ 转载(1) ┆ 收藏(0)
标签: 

杂谈

分类: WPF/C#

    在Win7的资源管理器中,如果我们选中【文件夹选项】->【查看】->【文件和文件夹】->【使用复选框以选择项】。则可通过列表项上的复选框实现多选,而不再需要按【Ctrl】或【Shift】键。WPF中没有对应的控件,但是利用WPF我们可以比较容易实现此功能。
讨论
    首先,CheckBox的选中状态应该和ListViewItem的选中状态保持一致,故需要将CheckBox的IsChecked属性和ListViewItem的IsSelected属性绑定到一起。
    其次,CheckBox的可见性应该在ListViewItem被选中或鼠标移动到其上面时可见,故需要把CheckBox的Visibility属性复合绑定到ListViewItem的IsMouseOver属性和IsSelected属性上。

效果
    实现后的效果如图所示:

阅读(2093) ┆ 评论(0) ┆ 转载(0) ┆ 收藏(0)
标签: 

杂谈

分类: VC/CPP/C

摘自MSDN

 

#include <windows.h>
#include <crtdbg.h>
#include <netfw.h>
#include <objbase.h>
#include <oleauto.h>
#include <stdio.h>

HRESULT WindowsFirewallInitialize(OUT INetFwProfile** fwProfile)
{
    HRESULT hr = S_OK;
    INetFwMgr* fwMgr = NULL;
    INetFwPolicy* fwPolicy = NULL;
    _ASSERT(fwProfile != NULL);
    *fwProfile = NULL;

    // Create an instance of the firewall settings manager.
    hr = CoCreateInstance(
            __uuidof(NetFwMgr),
            NULL,
            CLSCTX_INPROC_SERVER,
        &n


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多