动手添加代码实现lib的应用
来源:互联网 发布:卖精仿鞋的淘宝店铺 编辑:程序博客网 时间:2024/05/16 12:21
1 . 在 StdAfx.h文件中加入代码:
这样在客户端的 debug 目录下生成组件的类型库头文件 (.tlh) 和类型库实现文件 (.tli) 。
2. 在调用Dll类的头文件中加入using namespace MYPROJLib;
4. 在调用Dll类的头文件中定义接口: IMyCom *ptr;(其中IMyCom 为接口)
5. 调用接口的函数:例如 ptr->MyF1();
6. 释放接口:在调用Dll类的析构函数或相关的释放函数中调用 ptr->Release(); CoUninitialize();
#import "..\MyProj\MyProj.tlb"
最后的StdAfx.h文件如下:
// stdafx.h : include file for standard system include files,
// or project specific include files that are used frequently, but
// are changed infrequently
//
#if !defined(AFX_STDAFX_H__2B646017_28AD_4CDE_9792_CB8F9A5C6B39__INCLUDED_)
#define AFX_STDAFX_H__2B646017_28AD_4CDE_9792_CB8F9A5C6B39__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#define VC_EXTRALEAN // Exclude rarely-used stuff from Windows headers
#include < afxwin.h > // MFC core and standard components
#include < afxext.h > // MFC extensions
#include < afxdisp.h> // MFC Automation classes
#include < afxdtctl.h> // MFC support for Internet Explorer 4 Common Controls
#ifndef _AFX_NO_AFXCMN_SUPPORT
#include < afxcmn.h > // MFC support for Windows Common Controls
#endif // _AFX_NO_AFXCMN_SUPPORT
#import "..\MyProj\MyProj.tlb "
// {{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
#endif // !defined(AFX_STDAFX_H__2B646017_28AD_4CDE_9792_CB8F9A5C6B39__INCLUDED_)
编译 StdAfx.cpp, // stdafx.h : include file for standard system include files,
// or project specific include files that are used frequently, but
// are changed infrequently
//
#if !defined(AFX_STDAFX_H__2B646017_28AD_4CDE_9792_CB8F9A5C6B39__INCLUDED_)
#define AFX_STDAFX_H__2B646017_28AD_4CDE_9792_CB8F9A5C6B39__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#define VC_EXTRALEAN // Exclude rarely-used stuff from Windows headers
#include < afxwin.h > // MFC core and standard components
#include < afxext.h > // MFC extensions
#include < afxdisp.h> // MFC Automation classes
#include < afxdtctl.h> // MFC support for Internet Explorer 4 Common Controls
#ifndef _AFX_NO_AFXCMN_SUPPORT
#include < afxcmn.h > // MFC support for Windows Common Controls
#endif // _AFX_NO_AFXCMN_SUPPORT
#import "..\MyProj\MyProj.tlb "
// {{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
#endif // !defined(AFX_STDAFX_H__2B646017_28AD_4CDE_9792_CB8F9A5C6B39__INCLUDED_)
这样在客户端的 debug 目录下生成组件的类型库头文件 (.tlh) 和类型库实现文件 (.tli) 。
2. 在调用Dll类的头文件中加入using namespace MYPROJLib;
// MyExeDlg.cpp : implementation file
//
#include " stdafx.h "
#include " MyExe.h "
#include " MyExeDlg.h "
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
using namespace MYPROJLib;
以下代码略
3.初始化COM库:在调用Dll的类的构造函数或者相关的地方调用CreateCom(CString strComName),其中strComName为借口名字。例如MyProj.dll中的MyCom接口,则strComName为“MyProj.MyCom”即CreateCom("MyProj.MyCom");//
#include " stdafx.h "
#include " MyExe.h "
#include " MyExeDlg.h "
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
using namespace MYPROJLib;
以下代码略
Create函数:
BOOL CMyExeDlg::CreateCom(CString strComName)
{
int length = strComName.GetLength();
size_t aLen = length + 1;
int wLen = MultiByteToWideChar( CP_ACP, 0,strComName,aLen, NULL,0);
LPOLESTR lpFileName = new WCHAR [wLen];
MultiByteToWideChar(CP_ACP, 0,strComName,aLen,lpFileName,wLen);
HRESULT hr=CoInitialize(NULL);
CLSID clsid;
hr=CLSIDFromProgID(/*OLESTR("MyProj.MyCom")*/lpFileName,&clsid);
if(FAILED(hr))
{
AfxMessageBox("COM Failed");
return FALSE;
}
ptr = NULL;
hr=CoCreateInstance(clsid,NULL,CLSCTX_INPROC_SERVER,__uuidof(IMyCom),(LPVOID*)&ptr);
return TRUE;
}
BOOL CMyExeDlg::CreateCom(CString strComName)
{
int length = strComName.GetLength();
size_t aLen = length + 1;
int wLen = MultiByteToWideChar( CP_ACP, 0,strComName,aLen, NULL,0);
LPOLESTR lpFileName = new WCHAR [wLen];
MultiByteToWideChar(CP_ACP, 0,strComName,aLen,lpFileName,wLen);
HRESULT hr=CoInitialize(NULL);
CLSID clsid;
hr=CLSIDFromProgID(/*OLESTR("MyProj.MyCom")*/lpFileName,&clsid);
if(FAILED(hr))
{
AfxMessageBox("COM Failed");
return FALSE;
}
ptr = NULL;
hr=CoCreateInstance(clsid,NULL,CLSCTX_INPROC_SERVER,__uuidof(IMyCom),(LPVOID*)&ptr);
return TRUE;
}
4. 在调用Dll类的头文件中定义接口: IMyCom *ptr;(其中IMyCom 为接口)
5. 调用接口的函数:例如 ptr->MyF1();
6. 释放接口:在调用Dll类的析构函数或相关的释放函数中调用 ptr->Release(); CoUninitialize();
0 0
- 动手添加代码实现lib的应用
- 从C的伪代码到汇编,动手实现objc_msgSend
- 动手写代码——基于Spark的TextRank实现
- 动手实现自己的Crouton
- 第一次动手写java的简单代码,实现输出一个空心菱形。
- LIB的应用
- 实现应用WebView组件加载使用HTML代码添加的帮助信息
- 添加lib库的方法
- VS2005 添加lib 的方法
- 动手敲代码——链表(C语言实现)
- VS2005项目中添加lib库以及代码中相对路径的问题
- [转载]VS添加lib库以及代码中相对路径的问题
- VS2005项目中添加lib库以及代码中相对路径的问题
- VS2005项目中添加lib库以及代码中相对路径的问题
- VS添加lib库以及代码中相对路径的问题
- VS2005项目中添加lib库以及代码中相对路径的问题
- 用js代码实现表格的添加
- 利用代码实现控件的添加
- Linux应用程序开发(一)---移植thttpd+Sqlite3+PHP5到arm linux(1)
- ATL问题集
- hadoop集群(完全分布式)配置步骤(测试通过)
- ATL中我们最关心的细节积累
- 利用ATL实现QuickTime多媒体文件播放
- 动手添加代码实现lib的应用
- 万能报表设计
- Linux应用程序开发(二)---让PHP5支持java在arm linux运行
- 初识cocos2dx——入门第一篇
- 黑马程序员--------------------------------Android 拍照、相册选图、裁剪上传
- 应用界面主题Theme使用方法
- Linux下的磁盘缓存
- 每天进步一点点——重新认识Linux中的进程号
- HBase-0.94新特性