- 博客(83)
- 资源 (35)
- 问答 (1)
- 收藏
- 关注
转载 CoInitialize ( NULL )或其它启动代码。MFC程序使用AfxOleInit() 收回COM库。MFC 程序不用这一步,它自动完成。 CoUninitialize();
// 1. 初始化COM库(让Windows加载DLLs)。通常是在程序的InitInstance()中调用 // CoInitialize ( NULL )或其它启动代码。MFC程序使用AfxOleInit()。 CoInitialize ( NULL ); // 2. 使用外壳提供的活动桌面组件对象类创建COM对象。 // 第四个参数通知COM需要什么接口(
2012-03-31 21:42:27 1527
转载 STDAPI DllRegisterServer()
// DllCanUnloadNow() is called when COM wants to unload our DLL from memory.// We check our lock count, which will be nonzero if there are any COM// objects still in memory.// Return S_FALSE to pre
2012-03-31 21:33:04 1405
原创 <unknwn.h>STDMETHODIMP_(ULONG) STDMETHOD_(ULONG, AddRef)() PURE;
#include //*struct ISimpleMsgBox : public IUnknown{ // IUnknown 方法 STDMETHOD_(ULONG, AddRef)() PURE; STDMETHOD_(ULONG, Release)() PURE; STDMETHOD(QueryInterface)(REFIID riid, void** ppv) P
2012-03-31 17:02:06 1083
原创 memmove
#include /*void* memmove(void *dest, const void* src, size_t n) { if(dest == NULL || src == NULL) return NULL; char* p =(char*) dest; char* q =(char*) src; while(n--)
2012-03-31 15:16:18 651
转载 char *unicodeToUtf8(const WCHAR *zWideFilename) WCHAR *mbcsToUnicode(const char *zFilename)
char *unicodeToUtf8(const WCHAR *zWideFilename) { int nByte; char *zFilename; nByte = WideCharToMultiByte(CP_UTF8, 0, zWideFilename, -1, 0, 0, 0, 0); zFilename = (char *)malloc(nByt
2012-03-31 13:45:37 877
转载 QueryInterface()
QueryInterface()QueryInterface()简称QI(),由客户端程序调用这个函数从COM对象请求不同的接口。我们在例子代码中因为只实现一个接口,QI()会很容易使用。QI()有两个参数:一个是所请求的接口IID,一个是指针的缓冲大小,如果查询成功,QI()将接口指针地址存储在这个缓冲指针中。HRESULT CUnknownImpl::QueryInterface ( R
2012-03-31 09:30:47 746
转载 实现接口,从IUnknown开始
实现接口,从IUnknown开始有必要回想一下IUnknown派生的每一个接口。因为IUnknown包含了两个COM对象的基本特性——引用计数和接口查询。当你编写组件对象类时(coclass),还要写一个满足自己需要的IUnknown实现。以实现IUnknown接口的组件对象类为例——下面这个例子可能是你编写的最简单的一个组件对象类。我们将在一个叫做CUnknownImpl的C++类中实现IUn
2012-03-31 09:21:16 1173
转载 客户应用程序调用COM API CoFreeUnusedLibraries()时,COM库遍历这个客户端应用已加载所有的DLL服务器并通过调用它的DllCanUnloadNow()函数查询每一个服务器
服务器生命其管理DLL服务器的一个与众不同的方面是控制它们被加载的时间。“标准的”DLLs被动的并且是在应用程序使用它们时被随机加载/或卸载。从技术上讲,DLL服务器也是被动的,因为不管怎样它们毕尽还是DLL,但COM库提供了一种机制,它允许某个服务器命令COM卸载它。这是通过输出函数DllCanUnloadNow()实现的。这个函数的原型如下: HRESULT DllCa
2012-03-31 09:11:03 1358
转载 处理HRESULT
处理HRESULT 这一部分准备用SUCCEEDED 和 FAILED宏进行一些简单的出错处理。主要是深入研究从COM方法返回的HRESULT,以便达到完全理解和熟练应用。 HRESULT是个32位符号整数,其非负值表示成功,负值表示失败。HRESULT有三个域:程度位(表示成功或失败),功能码和状态码。功能码表示HRESULT来自什么组件或程序。微软给不同的组件多赋予
2012-03-31 08:58:45 1087
原创 创建一个用于建立快捷方式的COM 对象并取得IShellLink 接口。
/*第二个例子展示了如何使用一个提供单接口的COM对象QueryInterface()函数。其中的代码用外壳的Shell Link组件对象类创建我们在第一个例子中获得的墙纸文件的快捷方式 以下是编程步骤: 初始化COM 库。 创建一个用于建立快捷方式的COM 对象并取得IShellLink 接口。 调用IShellLink 接口的SetPath()方法 调用对象的Qu
2012-03-31 08:52:05 1292
转载 第二个例子展示了如何使用一个提供单接口的COM对象QueryInterface()函数
使用多接口的COM对象 第二个例子展示了如何使用一个提供单接口的COM对象QueryInterface()函数。其中的代码用外壳的Shell Link组件对象类创建我们在第一个例子中获得的墙纸文件的快捷方式以下是编程步骤:初始化COM 库。 创建一个用于建立快捷方式的COM 对象并取得IShellLink 接口。调用IShellLink 接口的SetPath()方法调用对象的Q
2012-03-31 08:45:12 658
原创 调用COM对象的GetWallpaper()方法。 如果GetWallpaper()成功,则输出/显示墙纸文件名
/*初始化COM库。 (Initialize) 创建一个与活动桌面交互的COM对象,并取得IActiveDesktop接口。 调用COM对象的GetWallpaper()方法。 如果GetWallpaper()成功,则输出/显示墙纸文件名。 释放接口(Release())。 收回COM库(Uninitialize)。 //*///#include #include
2012-03-31 08:43:29 1202
转载 第一个例子展示的是单接口COM对象
用例子代码总结上述内容 下面用两个例子演示本文所讲的COM概念。代码中还包含了本文的例子工程。使用单接口COM对象 第一个例子展示的是单接口COM对象。这可能是你碰到得最简单的例子。它使用外壳中的活动桌面组件对象类(CLSID_ActiveDesktop)来获得当前桌面墙纸的文件名。请确认系统中安装了活动桌面(Active Desktop)。以下是编程步骤:初始化COM库
2012-03-31 08:29:30 683
转载 得到一个Unicode串时,可以用下列几种方法之一将它转换成char类型串
当你从某个COM方法返回得到一个Unicode串时,可以用下列几种方法之一将它转换成char类型串:1、调用 WideCharToMultiByte() API。2、调用CRT 函数wcstombs()。3、使用CString 构造器或赋值操作(仅用于MFC )。4、使用ATL 串转换宏。 WideCharToMultiByte() 你可以用WideCharToM
2012-03-31 08:25:46 750
转载 CoFreeUnusedLibraries()API。这个API将卸载任何没有明显引用的COM服务器
删除COM对象 前面说过,你不用释放COM对象,只要告诉它们你已经用完对象。IUnknown是每一个COM对象必须实现的接口,它有一个方法,Release()。调用这个方法通知COM对象你不再需要对象。一旦调用了这个方法之后,就不能再次使用这个接口,因为这个COM对象可能从此就从内存中消失了。 如果你的应用程序使用许多不同的COM对象,因此在用完某个接口后调用Release()
2012-03-30 21:31:25 1381
原创 Interface\{00000001-0000-0000-C000-000000000046}] @="IClassFactory"
[HKEY_CLASSES_ROOT\Interface\{00000000-0000-0000-C000-000000000046}]@="IUnknown"[HKEY_CLASSES_ROOT\Interface\{00000000-0000-0000-C000-000000000046}\BaseInterface]@=""[HKEY_CLASSES_ROOT
2012-03-30 21:23:36 1779
转载 MIDL_INTERFACE("00000001-0000-0000-C000-000000000046") IClassFactory : public IUnknown
EXTERN_C const IID IID_IClassFactory;#if defined(__cplusplus) && !defined(CINTERFACE) MIDL_INTERFACE("00000001-0000-0000-C000-000000000046") IClassFactory : public IUnknown { pu
2012-03-30 21:17:35 1697
转载 IClassFactory = interface(IUnknown) ['{00000001-0000-0000-C000-000000000046}']
{ IClassFactory interface } {$EXTERNALSYM IClassFactory} IClassFactory = interface(IUnknown) ['{00000001-0000-0000-C000-000000000046}'] function CreateInstance(const unkOuter: IUnknown; c
2012-03-30 21:15:07 1454
转载 const IID IID_IUnknown
EXTERN_C const IID IID_IUnknown;#if defined(__cplusplus) && !defined(CINTERFACE)#if (_MSC_VER >= 1200) // VC6 or greaterextern "C++"{#endif MIDL_INTERFACE("00000000-0000-0000-C000-00000000
2012-03-30 12:30:57 1959
转载 java.net Socket
import java.io.*; import java.net.*; public class Client { Socket socket; BufferedReader in; PrintWriter out; public Client() { try { socket = new Socket("127.0.0.1", 10000); in = new Bu
2012-03-29 21:02:37 538
原创 str2num
// str2num.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include "math.h"int str2num(char *s){ char ch; int i=0; int a[255]; int sum=0; do { ch=s[i];
2012-03-29 15:13:57 2114
原创 ReleaseBuffer只有一个作用,就是更新字符串的长度
void CStringBufferDlg::OnButton1() { // TODO: Add your control notification handler code hereCString WeatherZone = "";int strLen = this->m_WeatherZone.GetLength();memcpy(WeatherZone.GetBuffer(s
2012-03-29 09:59:33 793
转载 m_Time = CTime::GetCurrentTime();
void CCreateIDDlg::OnButcreate() { // TODO: Add your control notification handler code here UpdateData(TRUE); m_ID = m_Date.Format("%Y%m%d"); m_ID += m_Time.Format("%H%M%S"); UpdateData(FALSE);
2012-03-28 22:02:47 995
转载 try throw catch
// except.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include "string.h"class CDivZeroException //定义一个除零的异常类{public: char ExceptionMsg[128]; //定义数据
2012-03-27 22:07:14 529
转载 主键(PrimaryKey) 复合主键 用一个无意义 的字段做主键将会更加有利于系统的可扩展性
1.2.6 主键(PrimaryKey)员工表中的每一行记录代表了一个员工,一般员工的名字就能唯一标识这一个员工,但是名字也是有可能重复的,这时我们就要为每一名员工分配一个唯一的工号:工号 姓名 部门 入职时间001 马小虎 产品开发部 2003年5月22 日002 王二小 技术支持部 2005年7月17 日003 白展堂 后勤部 1998年3月27 日004 钱长贵 销售部 200
2012-03-27 16:36:47 1721
转载 求两个整数的最小公倍数
求两个整数的最小公倍数假设两个整数为x和y。算法1:(1)先求出x和y的最大公约数,并赋给变量r;(2)x和y的最小公倍数即为:x*y/r程序如下:int getm(int x,int y){int r;r=getcd(x,y);return x*y/r;}该方法需调用求最大公约数函数。算法2:(1)将两数中较小的数放在x中,较大数保存在y中。(2)判断y是否为x的整
2012-03-27 16:17:10 2442
转载 求两个正整数的最大公约数
求两个正整数的最大公约数假设两个正整数用u和v表示,算法采用辗转相除法,具体描述如下:(1) 求出u%v的值并赋给变量r:r=u%v(2) 进行迭代:u=v;v=r;(3) 看v是否为0,若是,则u即为所要求的值,否则,转到(1)。程序如下:int getcd(int u,int v){int r;while(v!=0){r=u%v;u=v; v=r;}return u
2012-03-27 16:14:28 989 1
转载 判断一个数是否是素数
判断一个数是否是素数给定一个整数,判断它是否是素数。由数学知识可得知:只要m能被2,3,…,m-1中的任何一个数整除,那么它就不是素数,否则就是素数。根据这一思路,我们用一个循环过程及判断一个数是否能被整除的方法构造出下面的算法:int isp(int m){int i=0;for(i=2;i<m;i++)if(m%i==0) return 0;return 1;}思路非常清晰:
2012-03-27 16:11:31 1392
转载 求ax^2+bx+c=0的根
求ax^2+bx+c=0的根分析:因为当b^2-4ac>=0时,方程有两个实根,否则(b^2-4ac<0)有两个共轭复根。其程序段如下:d=b*b-4*a*c;if(d>=0){x1=(-b+sqrt(d))/2a;x1=(-b-sqrt(d))/2a;printf(“x1=%8.4f,x2=%8.4f\n”,x1,x2);}else{r=-b/(2*a);i =sqrt
2012-03-27 16:08:36 1001
转载 if((c>=’A’)&&(c<=’Z’)) 判断c是否是大写字母
1、 学会省力气的编程方法很多考生在编程中做了很多费力不讨好的事情。例如:c是一个char类型的变量,程序要求判断c是否是大写字母。有的人就开始在大脑中努力搜寻已经背了N遍的ASCII编码表,终于写出了下面的代码:if((c>=65)&&(c<=90))……值得庆幸的是,他的记忆力很好,没有背错ASCII编码表。如果背错了的话,那就有可能上机考试就要重考了!其实有完全不用使用ASCII编
2012-03-27 15:58:00 3039
原创 A* obj=new C(); obj->fun(); class C:public B { private: virtual fun()
// tmpDerive.cpp : Defines the entry point for the console application.//#include "stdafx.h"class A{public: virtual fun() { printf("A!\n"); }};class B:public A{protected: virtual fun()
2012-03-26 20:44:35 918
转载 void Validate(double x); ::Validate(2.0f);
// P95.cpp : Defines the entry point for the console application.//#include "stdafx.h"void Validate(float x){ printf("float\n");}void Validate(int x){ printf("int\n"); }int main(int a
2012-03-26 20:24:12 511
转载 OutputInfo(int num,...)//定义一个省略号参数的函数
// OutputInfo.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include "stdio.h"#include void OutputInfo(int num,...) //定义一个省略号参数的函数{ va_list arguments;
2012-03-26 20:14:54 1436
转载 typedef int (A::*Myfunction)(int); B* pB = new B; Myfunction pf = (Myfunction)(&B::Fb);
// ImInDerived.cpp : Defines the entry point for the console application.//#include "stdafx.h"#includeclass A{public: A(){}; virtual ~A(){};};class B : public A{public: B(){}; ~B(){};
2012-03-26 19:05:07 735
原创 (deriveObj.*pVIDeriveMemFunc)(20);
// test.cpp : Defines the entry point for the console application.//#include "stdafx.h"class Base {public: //ordinary member function void setValue(int iValue){printf("Base::setValue(%d)
2012-03-26 18:56:26 488
转载 HELLO_FUNC phello_fun=&test::hello; (p->*phello_fun)();
#include #include class test { public: test(int i){ m_i=i;} test(){}; void hello() { printf("hello\n"); } private: int m_i; }; /*int main() { test *p=new test(); p->hell
2012-03-26 18:31:41 602
转载 memcpy(&func2,&phello_fun,sizeof(phello_fun));
#include #include class test { public: test(int i){ m_i=i;} test(){}; void hello() { printf("hello\n"); } private: int m_i; }; /*int main() { test *p=new test(); p->hello(
2012-03-26 18:12:49 674
原创 cout<<"Press any key to exit!\n"<<endl;
#include #include #include int main(){ CFile f; CFileException e; char* pFileName="d:\\test.dat"; if(!f.Open(pFileName,CFile::modeRead,&e)) { cout<<("Open File Failed!")<<endl; } //*
2012-03-26 09:09:40 726
转载 MFC init
//首先,在文件中加入如下头文件语句:#ifndef VC_EXTRALEAN#define VC_EXTRALEAN // 从 Windows 头中排除极少使用的资料#endif#include #include // MFC 核心组件和标准组件#include // MFC 扩展 #pragma comment(lib,"ker
2012-03-25 11:00:53 859
原创 CFile f; CFileException e; if(!f.Open(pFileName,CFile::modeRead...
#include#include#includeint main(){ CFile f; CFileException e; char* pFileName="d:\\test.dat"; if(!f.Open(pFileName,CFile::modeRead,&e)) { cout<<("Open File Failed!")<<endl; } else { c
2012-03-24 21:02:27 1108
DownForPhpExt.rar
2016-02-17
网站被迫下线提醒功能
2016-05-24
TA创建的收藏夹 TA关注的收藏夹
TA关注的人