• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >vc/mfc > 火急!!!100分请教自定义结构传递问题

火急!!!100分请教自定义结构传递问题

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-04

佚名通过本文主要向大家介绍了 火急!!!100分请教自定义结构传递问题等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: 火急!!!100分请教自定义结构传递问题
描述:

小第到了火烧眉毛地步,绞尽脑汁不得其解,情各位帮忙!
在idl中声明结构体:
// produce the type library (SimpleTest.tlb) and marshalling code.
import "oaidl.idl";
import "ocidl.idl";
[
uuid(C25AEE22-5363-4f63-83A3-73A104D72AA6)
]
typedef struct thisPoint
{
long x;
long y;
}THISPOINT;
 
[
object,
uuid(D21279C3-4238-4F8C-93D1-4A31AF5C82B0),
dual,
helpstring("ISimpleInterface Interface"),
pointer_default(unique)
]
interface ISimpleInterface : IDispatch
{
[id(1), helpstring("method Trasfer")] HRESULT Trasfer([in] VARIANT var);//接口ISimpleInterface 只有一个方法:
};
[
uuid(741B30EA-C1DD-4369-A8EE-A9EC569BAB98),
helpstring("SimpleInterface Class")
]
方法实现:
// SimpleInterface.cpp : Implementation of CSimpleInterface
#include "stdafx.h"
#include "SimpleTest.h"
#include "SimpleInterface.h"
/////////////////////////////////////////////////////////////////////////////
// CSimpleInterface
STDMETHODIMP CSimpleInterface::Trasfer(VARIANT var)
{
//::MessageBox(NULL,_T("Hello World!"),_T("Welcome"), MB_OK);
if(var.vt == VT_RECORD)
{
IRecordInfo *pRecordInfo = var.pRecInfo;
        PVOID pMy_xy = var.pvRecord;
VARIANT varx,vary;
int x,y;
VariantInit(&varx);
VariantInit(&vary);
pRecordInfo->GetField(pMy_xy,L"x",&varx);
if(varx.vt == VT_INT)
x = varx.intVal;
pRecordInfo->GetField(pMy_xy,L"y",&vary);
if(varx.vt == VT_INT) 
y = vary.intVal;
//ifend
char *xx = (char*)x;
::MessageBox(NULL,xx,_T("Welcome"),MB_OK }
return S_OK;
}
下面是客户端:用win32应用程序实现,加按钮Onhere
// SimpleClientDlg.cpp : implementation file
//
#include "stdafx.h"
#include "SimpleClient.h"
#include "SimpleClientDlg.h"
#include "d:\atl\4_5\easy\simpletest\SimpleTest_i.c"
#include "d:\atl\4_5\easy\simpletest\SimpleTest.h"
......
void CSimpleClientDlg::Onhere() 
{
const GUID GUID_thisPoint = {0xc25aee22, 0x5363, 0x4f63, {0x83, 0xa3, 0x73, 0xa1, 0x4, 0xd7, 0x2a, 0xa6}};
HRESULT hr;
ISimpleInterface * pIntf = NULL;
hr = CoInitialize(0);//****加此句最终成功****
if(SUCCEEDED(hr))
{
hr = CoCreateInstance(CLSID_SimpleInterface, NULL, CLSCTX_SERVER,
IID_ISimpleInterface, (void **)& pIntf);
  if(SUCCEEDED(hr))
  {
  ITypeLib* pTypeLib=NULL;
  ITypeInfo* pTypeInfo=NULL;
  IRecordInfo* pRecordInfo=NULL;
  HRESULT hr2;
      hr2 = LoadRegTypeLib(LIBID_SIMPLETESTLib,1,0,0,&pTypeLib);
      pTypeLib->GetTypeInfoOfGuid(_uuidof(struct thisPoint),&pTypeInfo);
      GetRecordInfoFromTypeInfo(pTypeInfo, &pRecordInfo);
  thisPoint * m_point = new thisPoint;
 m_point->x = 50;
 m_point->y = 100;
 VARIANT vr;
 VariantInit(&vr);
 vr.vt=VT_RECORD; 
 vr.pvRecord=(PVOID)m_point;
 pRecordInfo->AddRef();//one IRecordInfo de Point
 vr.pRecInfo=pRecordInfo; //返回它的地址
   
//  m_point
     pIntf->Trasfer(vr);
     pIntf->Release();
 pRecordInfo->Release();
 VariantClear(&vr);
 /* 
  
 hr1 = CoInitialize(0);
 if (SUCCEEDED(hr1))
 {
 
 }
   */
  }
}
  CDialog::OnOK();
}
请高手帮助修改!!定谢!


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

相关文章

  • 2017-06-05 判断是否在浏览器上单击了鼠标
  • 2017-06-05 有谁知道在钩子回调函数“KeyboardProc”中如何判断是否是某个功能组合键被按下?
  • 2017-06-05 请熟悉内存溢出,内存管理的高手进来。
  • 2017-06-05 在windows的explorer中,选中右边的ppt文件,左边就会预览一下
  • 2017-06-04 关于报错问题
  • 2017-06-04 howdevelopment请进,别人也帮着看看(关于ATL的定时器)
  • 2017-06-04 各位VC高人,请教一个问题,如能帮忙,不胜感激,在此先谢过各位
  • 2017-06-05 请教两个进程操作的一个疑惑
  • 2017-06-04 vc开发vb控件的透明问题
  • 2017-06-05 stubmanager是真实存在吗?

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 如何进行另一程序的菜单操作?
    • 如何监视一EXE对某DLL函数的调用,从而知道DLL函数的参数?
    • 新手需要写个服务程序,代码在MFC下已调试通过
    • 如何获取线程的当前暂停计数?
    • 用ATL写的控件,加入了属性页,但在VB中加入后点击右键菜单最下面没有"属性"一项,要加什么接口才能使之可在菜单中打开属性对话框?在线
    • 题:MSREMOTEDATACTL或DBGRID控件的接口问题?
    • solidworks中SelectByID函数的使用
    • 一个只能在指定U盘上才能运行的控件
    • 这个Hook该如何写?
    • 进程的问题。

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有