阅读(609) ┆ 评论(4) ┆ 转载(0) ┆ 收藏(0)查看全⽂>>阅读(557) ┆ 评论(1) ┆ 转载(0) ┆ 收藏(0)查看全⽂>>类型的已垃圾回收委托进⾏了回调
c++获取应⽤程序所在⽬录的⽅法 (2012-08-21 12:00)
标签: c  应⽤程序 路径 杂谈分类: VC/CPP/C C#中⾮托管代码多次调⽤托管代码回调函数出错的问题解决办法 (2012-08-08 09:43)
标签: c  ⾮托管代码 回调函数 垃圾回收 杂谈分类: WPF/C#CreateProcess 的第⼆个参数最好不要⽤常量字符串 (2011-05-05 17:00)
标签: 杂谈分类: 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'));
}
转载
在C#中,有时会⽤到⾮托管代码(⽐如C++)定义的函数接⼝等,⽽有些函数是带有回调的。这时通常我们需要在托管代码(C#)中通过委托的⽅式实现此回调函数。但是有时就会碰到下⾯这样的错误:
检测到 XXXXXXXX::Invoke”类型的已垃圾回收委托进⾏了回调。这可能会导致应⽤程序崩溃、损坏和数据丢失。向⾮托管代码传递委托时,托管应⽤程序必须让这些委托保持活动状态,直到确信不会再次调⽤它们。
⼀般只调⽤⼀次回调函数时,不会出现这种情况。出现这种情况,是由于多次调⽤了回调函数,⽽且回调函数是在局部被new 出来的。要避免这个错误的发⽣,需要将回调函数实例化为成员变量,这样就不会被垃圾回收了。⽐如:
class A
{
public delegate void ACallback(String msg);
public void FuncA(ACallback callback, String msg)
{
&n
转载▼
函数原型:
BOOL WINAPI CreateProcess(
__in      LPCTSTR lpApplicationName,
__in_out  LPTSTR lpCommandLine,
阅读(206) ┆ 评论(0) ┆ 转载(0) ┆ 收藏(0)查看全⽂>>阅读(991) ┆ 评论(0) ┆ 转载(0) ┆ 收藏(0)查看全⽂>>显⽰窗⼝时不激活窗⼝的⽅法 (2011-05-04 17:58)
标签: 杂谈分类: VC/CPP/C 代码中控制打开同⼀⽂件夹时弹出的explorer 窗⼝数量 (2010-06-25 11:00)
标签: 杂谈分类: VC/CPP/C    __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
转载▼
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('');
CreateProcess(NULL, path, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);
2. 如果是在当前程序显⽰⼀个⾮模态的对话框⽽不激活该窗⼝的话。
假设当前项⽬是⼀个对话框程序,CTestDlg 类为主对话框,当点击CTestDlg 的确定按钮的时候显⽰不激活的对话框CNoActiveDlg ,则:startupinfo
在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 。
转载▼
如果想让资源管理器(explorer )每次打开⼀个⽂件夹时都启⽤新的窗⼝,可以使⽤如下⽅式:
c++:
ShellExcute(NULL, 'explore', 'c:\\', NULL, NULL, SW_SHOWNORMAL);
c#:
Win7:
System.Diagnostics.Process.Start('', @'c:\');
xp:
还未到⽅法
如果想让资源管理器(explorer )每次打开⼀个⽂件夹时,如果该⽂件夹已经打开,则只显⽰已打开的⽂件夹,
树控件(2010-05-26 16:28) CheckBoxListView(2010-05-26 14:35)转载▼
代码⽚段:
Window1.xaml⽂件
转载▼的资源管理器中,如果我们选中【⽂件夹选项】
阅读(2093) ┆评论(0) ┆转载(0)┆收藏(0)查看全⽂>>向Windows防⽕墙中添加端⼝、应⽤程序(2010-01-23 11:00)
转载▼
标签:杂谈分类: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