DYQ老师在esri培训教材上有C#调用IDL导出dll组件的方法
在这里使用演示C++调用IDLEXBR_ASSISTANT导出的COM组件的方法
同样以helloworldex__define.pro为例看导出为dll并进行数据传递
;helloworldex__define.pro
FUNCTION helloworldex::HelloFrom, who
IF (N_ELEMENTS(who) NE 0) THEN BEGIN
MESSAGE = "Hello World from " + who
tmp = dialog_message(MESSAGE,/infor)
RETURN, message
ENDIF ELSE BEGIN
MESSAGE = 'Hello World'
tmp = dialog_message(MESSAGE,/infor)
RETURN, message
ENDELSE
END
; -----------------------------------------------------------
; Init returns object reference on successful
; initialization.
FUNCTION helloworldex::INIT
RETURN, 1
END
; -----------------------------------------------------------
; Object definition.
PRO helloworldex__define
struct = {helloworldex, $
who: '' , $
message: ' ' $
}
END
(1) IDL命令行输入IDLEXBR_ASSISTANT新建 COM工程
(2) 设置 HelloFrom的输出参数
生成com文件(dll文件和tlb文件)
(3) 发布后注册组件
regsvr32 “helloworldex.dll”
(4) 调用组件
#include "stdafx.h"
#include <atlbase.h>
#import "helloworldex.dll" no_namespace
int _tmain(int argc, _TCHAR* argv[])
{
CoInitialize(NULL);
{
CComPtr<Ihelloworldex> spFoo;
spFoo.CoCreateInstance(__uuidof(helloworldex));
CComVariant vtNULL(0);
HRESULT hr = spFoo->CreateObject(0,vtNULL,vtNULL);
_bstr_t returnstr;
returnstr=spFoo->HELLOFROM(L"ESRIChina-BJ");//,returnstr);
wprintf(L"%s", (WCHAR *)returnstr);
}
CoUninitialize();
return 0;
}
输出Hello World from ESRIChina-BJ