服务端代码------------------------------------------------------------------------------------------------------------------------------------------------------------

altstopwatch.idl [接口定义文件]

// altstopwatch.idl : IDL source for altstopwatch
// // This file will be processed by the MIDL tool to
// produce the type library (altstopwatch.tlb) and marshalling code. import "oaidl.idl";
import "ocidl.idl"; [
object,
uuid(FD2BE6F3-9074-47F3-9884-FDD3DE13D158),
pointer_default(unique)
]
</pre><pre code_snippet_id="458982" snippet_file_name="blog_20140827_3_5235692" name="code" class="plain">//在这里定义接口
interface Istopwatch : IUnknown{
<span style="white-space:pre">	</span>    //同样的属性(都指向同一个成员变量),ID值同样
<strong><span style="font-size:18px;color:#ff0000;"> [propget, id(1), helpstring("取值")] HRESULT name ([out ,retval] BSTR *val);
[propput, id(1), helpstring("设值")] HRESULT name([in] BSTR val);</span></strong>
}; [
uuid(A4E51DE3-D343-4CB2-A901-5CE1D2067309),
version(1.0),
]
library altstopwatchLib
{
importlib("stdole2.tlb");
[
uuid(FD3216FD-B513-40F1-BE2C-72B2954D1368),
helpstring("help string stopwatch class")
]
coclass stopwatch
{
[default] interface Istopwatch;
};
};

stopwatch.h [接口定义头文件]

// stopwatch.h : Declaration of the Cstopwatch

#pragma once
#include "resource.h" // main symbols #include "altstopwatch_i.h" #if defined(_WIN32_WCE) && !defined(_CE_DCOM) && !defined(_CE_ALLOW_SINGLE_THREADED_OBJECTS_IN_MTA)
#error "Single-threaded COM objects are not properly supported on Windows CE platform, such as the Windows Mobile platforms that do not include full DCOM support. Define _CE_ALLOW_SINGLE_THREADED_OBJECTS_IN_MTA to force ATL to support creating single-thread COM object's and allow use of it's single-threaded COM object implementations. The threading model in your rgs file was set to 'Free' as that is the only threading model supported in non DCOM Windows CE platforms."
#endif using namespace ATL; // Cstopwatch class ATL_NO_VTABLE Cstopwatch :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<Cstopwatch, &CLSID_stopwatch>,
public Istopwatch
{
public:
Cstopwatch()
{
} DECLARE_REGISTRY_RESOURCEID(IDR_STOPWATCH) BEGIN_COM_MAP(Cstopwatch)
COM_INTERFACE_ENTRY(Istopwatch)
END_COM_MAP() DECLARE_PROTECT_FINAL_CONSTRUCT() HRESULT FinalConstruct()
{
return S_OK;
} void FinalRelease()
{
} public:
//将接口进行实现
<strong><span style="font-size:18px;color:#ff6600;">public:
virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_name(
/* [retval][out] */ BSTR *val)
{
m_name.CopyTo(val);
return S_OK;
} virtual /* [helpstring][id][propput] */ HRESULT STDMETHODCALLTYPE put_name(
/* [in] */ BSTR val)
{
m_name.AssignBSTR(val);
return S_OK;
}</span></strong> private:
CComBSTR m_name; }; OBJECT_ENTRY_AUTO(__uuidof(stopwatch), Cstopwatch)

###############################################################################################################################

client代码

#include <Windows.h>
#include <atlbase.h>
#include <atlcom.h>
#include <stdio.h> #import "../Debug/altstopwatch.dll" named_guids no_namespace void test()
{
CoInitialize(NULL); {
CComPtr<Istopwatch> ptr ;
HRESULT hr = ptr.CoCreateInstance(CLSID_stopwatch, NULL, CLSCTX_ALL);
assert((SUCCEEDED(hr))); //因为我之前写成了
//BSTR s = L"test"
//所以::SysAllocStringByteLen算出来一直是0 汗啊!!!!!!!!!!!!!!
BSTR s = ::SysAllocString(L"test"); //对这个进行求值的字符串。必须由::SysAllocByte分配
int len = ::SysStringByteLen(s);
int len2 = ::SysStringByteLen(L"ffffff");
assert(len==8);
assert(len2 == 0); BSTR m_str = ::SysAllocStringByteLen((char*)s, len);
ptr->put_name(s);
BSTR sr = NULL;
ptr->get_name(&sr); int r = wcscmp(s, sr);
assert(r == 0); ::SysFreeString(s);
printf("access resource success!");
} CoUninitialize();
} int main(int argc, char *argv[])
{
test();
getchar();
return 0;
}

ATL入门的更多相关文章

  1. 2013 duilib入门简明教程 -- 事件处理和消息响应 (17)

        界面的显示方面就都讲完啦,下面来介绍下控件的响应.     前面的教程只讲了按钮和Tab的响应,即在Notify函数里处理.其实duilib还提供了另外一种响应的方法,即消息映射DUI_BEG ...

  2. Qt入门之基础篇(1):Qt4及Qt5的下载与安装

    转载请注明出处:CN_Simo. 导语: Qt是一个跨平台的C++图形界面应用程序框架.它提供给开发者建立图形用户界面所需的功能,广泛用于开发GUI程序,也可用于开发非GUI程序.Qt很容易扩展,并且 ...

  3. Linux及Arm-Linux程序开发笔记(零基础入门篇)

    Linux及Arm-Linux程序开发笔记(零基础入门篇)  作者:一点一滴的Beer http://beer.cnblogs.com/ 本文地址:http://www.cnblogs.com/bee ...

  4. Qt入门之基础篇 ( 一 ) :Qt4及Qt5的下载与安装

    转载请注明出处:CN_Simo. 导语: Qt是一个跨平台的C++图形界面应用程序框架.它提供给开发者建立图形用户界面所需的功能,广泛用于开发GUI程序,也可用于开发非GUI程序.Qt很容易扩展,并且 ...

  5. 【转载】COM编程入门不得不看的文章 :第一部分 什么是COM,如何使用COM

    原文:COM编程入门不得不看的文章 :第一部分 什么是COM,如何使用COM 原文:http://www.codeproject.com/Articles/633/Introduction-to-CO ...

  6. <2013 12 01> 一篇很好的关于windows编程的入门指导(2013年末写的,比较前沿)

    我之前做了不少嵌入式开发,从单片机到ARM到RTOS到Linux等等,可以说走的是电气工程师的路线,对编程也是实用性的,跟计算机学院的科班套路不同.最近同学做一个windowsCE的项目请我帮忙,之前 ...

  7. COM编程快速入门

    COM编程快速入门 COM编程快速入门 http://www.vckbase.com/index.php/wv/1642   COM是一种跨应用和语言共享二进制代码的方法.与C++不同,它提倡源代码重 ...

  8. 【Linux开发】Linux及Arm-Linux程序开发笔记(零基础入门篇)

    Linux及Arm-Linux程序开发笔记(零基础入门篇) 作者:一点一滴的Beer http://beer.cnblogs.com/ 本文地址:http://www.cnblogs.com/beer ...

  9. duilib教程之duilib入门简明教程17.事件处理和消息响应

    界面的显示方面就都讲完啦,下面来介绍下控件的响应.    前面的教程只讲了按钮和Tab的响应,即在Notify函数里处理.其实duilib还提供了另外一种响应的方法,即消息映射DUI_BEGIN_ME ...

随机推荐

  1. inode与ln命令

    inode可以看: http://www.cnblogs.com/itech/archive/2012/05/15/2502284.html 每个inode节点的大小,一般是128字节或256字节.i ...

  2. [RxJS] Marbles Testings

    Install: npm install — save-dev jasmine-marbles Basic example: import {cold, getTestScheduler} from ...

  3. 4.dubbo-demo+简易监控中心安装+管理控制台安装

    转自:https://blog.csdn.net/zhangweigangweiwu/article/details/52244099 tomcat:apache-tomcat-6.0.39 需要用到 ...

  4. Bean复制的几种框架性能比较(Apache BeanUtils、PropertyUtils,Spring BeanUtils,Cglib BeanCopier)

    转自:http://www.cnblogs.com/kaka/archive/2013/03/06/2945514.html 比较的是四种复制的方式,分别为Apache的BeanUtils和Prope ...

  5. 2.3 Streams API 官网剖析(博主推荐)

    不多说,直接上干货! 一切来源于官网 http://kafka.apache.org/documentation/ 2.3 Streams API 2.3 Streams API 在0..0增加了一个 ...

  6. Eclipse中自动添加注释

    方法一:Eclipse中设置在创建新类时自动生成注释  windows-->preference  Java-->Code Style-->Code Templates  code- ...

  7. git提交代码到本地仓库和远程仓库

    5.commit代码到本地git仓库 选中需要 Commit 的项目,右键->Team->Commit,       填写相关的 Commit message,并选择需要提交的 Files ...

  8. (cocos2d-js游戏)測试你的反应速度----------基本逻辑(上)

    游戏玩法:点击開始游戏.等待一个随机时间.然后背景颜色会变(在t1时刻),这时候你须要点击屏幕(在t2时刻),游戏结束.你的反应时间就是天t2-t1. 游戏逻辑: 游戏逻辑非常easy,如上图所看到的 ...

  9. Android 基于Http的多线程下载的实现

    a.对于网络上的一个资源,首先发送一个请求,从返回的Content-Length中回去需要下载文件的大小,然后根据文件大小创建一个文件. this.fileSize = conn.getContent ...

  10. python内存增长问题

    如果你的程序没有调用什么特殊的库, 只是用了很平常的库, 而且使再循环很多的情况下, 那么建议你把循环里的程序拆出来,写成一子函数,循环子函数. 如下面格式: for   (循环) 子函数 这样程序每 ...