那个C或C++高手指点一下!纯C 调用 tlb 类型库或 ActiveX 部件的方法!
实现 Automation
就是不使用 VC 的 IDE 坏境的情况下!如何使用纯C实现?关于这个问题已经困扰我很久了!在网上查过无数资料都是使用VC的IDE的!
实现 Automation
就是不使用 VC 的 IDE 坏境的情况下!如何使用纯C实现?关于这个问题已经困扰我很久了!在网上查过无数资料都是使用VC的IDE的!
解决方案 »
- 求助,CDialogBar包含CTreeCtrl不能自动调整大小
- 自绘控件继承于CCombobox,如何赋值
- 图像配准中的相关运算(correlation)
- 关于CFile::Read的问题,各位高手帮忙解决下,谢谢
- 菜单的使用问题
- 如何将CTreeView中的CTreeCtrl替换掉
- 读取已经运行的窗口句炳的api是那个?
- WSASend 函数参数的问题。
- 求助 关于字符串 不胜感激!!!
- 为什么这样调用RegisterServiceProcess不能通过呢?
- 求助:IE编程中“创建BHO”如何调试的问题
- 奇怪问题求助,网页嵌入OCX控件,当连续刷新若干次页面后,IE竟然显示“无法打开页面”,请问是怎么回事?
对了, 啥叫使用 VC IDE 的, 啥叫不使用IDE的 ....#define COBJMACROS
#include <windows.h>
#include <stdio.h>// {00024500-0000-0000-C000-000000000046}
static const GUID guidExcelApplication =
{ 0x00024500, 0x0, 0x0, { 0xC0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x46 } };DISPPARAMS nullParam = { NULL , NULL , 0 , 0 };IDispatch* OpenExcelWorkBook( LPCWSTR strFileName )
{
IDispatch *pExcelApp = NULL , *pWSP = NULL, *pWB = NULL; VARIANT varResult = { VT_EMPTY } ,
varParam[4] = { { VT_EMPTY } , { VT_EMPTY } , { VT_EMPTY } , { VT_EMPTY } } ;
HRESULT hr = CoCreateInstance(
&guidExcelApplication , NULL , CLSCTX_LOCAL_SERVER ,
&IID_IDispatch , (void**)&pExcelApp ); if( FAILED( hr ) )
{
fprintf( stderr , "Create Excel Application Object Failed.\n" );
exit( 10 );
} // property Workbooks.
hr = IDispatch_Invoke( pExcelApp , 0x0000023c , &IID_NULL , LOCALE_SYSTEM_DEFAULT ,
DISPATCH_PROPERTYGET , &nullParam , &varResult , NULL , NULL ); if( FAILED( hr ) || varResult.vt != VT_DISPATCH || !varResult.pdispVal )
{
fprintf( stderr , "Get Work Books Failed.\n" );
exit( 10 );
} IDispatch_Release( pExcelApp ); pExcelApp = NULL; pWSP = varResult.pdispVal; varResult.vt = VT_EMPTY; {
DISPPARAMS dispParams = { varParam , NULL , 1 , 0 };
varParam[0].vt = VT_BSTR;
varParam[0].bstrVal = SysAllocString( strFileName ); // method Open.
hr = IDispatch_Invoke( pWSP ,
0x00000783 , &IID_NULL , LOCALE_SYSTEM_DEFAULT ,
DISPATCH_METHOD , &dispParams , &varResult , NULL , NULL ); VariantClear( &varParam[0] );
} if( FAILED( hr ) || varResult.vt != VT_DISPATCH || !varResult.pdispVal )
{
fprintf( stderr , "Open file failed.\n" );
exit( 10 );
} IDispatch_Release( pWSP ); pWSP = NULL;
pWB = varResult.pdispVal; varResult.vt = VT_EMPTY; return pWB;
}void slove( IDispatch* pWB )
{
IDispatch *pSheets = NULL; VARIANT varResult = { VT_EMPTY };
IDispatch *pSheet = NULL , *pRange = NULL;
// Sheets
HRESULT hr = IDispatch_Invoke( pWB , 0x000001e5 , &IID_NULL , LOCALE_SYSTEM_DEFAULT ,
DISPATCH_PROPERTYGET , &nullParam , &varResult , NULL , NULL ); if( FAILED( hr ) || varResult.vt != VT_DISPATCH || !varResult.pdispVal )
{
fprintf( stderr , "Get Work Books Sheets Failed.\n" );
exit( 10 );
} pSheets = varResult.pdispVal; varResult.vt = VT_EMPTY; {
VARIANT varParam = { VT_I4 , 1 };
DISPPARAMS dispParam = { &varParam , NULL , 1 , 0 };
// items.
hr = IDispatch_Invoke( pSheets , 0 , &IID_NULL , LOCALE_SYSTEM_DEFAULT ,
DISPATCH_PROPERTYGET , &dispParam , &varResult , NULL , NULL );
if( FAILED( hr ) || varResult.vt != VT_DISPATCH || !varResult.pdispVal )
{
fprintf( stderr , "Get Work Sheet failed.\n" );
exit( 10 );
} pSheet = varResult.pdispVal; varResult.vt = VT_EMPTY;
} IDispatch_Release( pSheets ); pSheets = NULL; {
// Cells.
hr = IDispatch_Invoke( pSheet , 0x000000ee , &IID_NULL , LOCALE_SYSTEM_DEFAULT ,
DISPATCH_PROPERTYGET , &nullParam , &varResult , NULL , NULL );
if( FAILED( hr ) || varResult.vt != VT_DISPATCH || !varResult.pdispVal )
{
fprintf( stderr , "Get Work Sheet failed.\n" );
exit( 10 );
} pRange = varResult.pdispVal; varResult.vt = VT_EMPTY;
} IDispatch_Release( pSheet ); pSheet = NULL; {
VARIANT varParam[2] = { { VT_I4 , 1 } , { VT_I4 , 1 } };
// Cell( 1 , 1 )
DISPPARAMS dispParam = { varParam , NULL , 2 , 0 }; hr = IDispatch_Invoke( pRange , 0 , &IID_NULL , LOCALE_SYSTEM_DEFAULT ,
DISPATCH_PROPERTYGET , &dispParam , &varResult , NULL , NULL );
} if( SUCCEEDED( hr ) &&
SUCCEEDED( VariantChangeType( &varResult , &varResult , 0 , VT_BSTR ) ) )
{
MessageBoxW( NULL , varResult.bstrVal , L"HEHE" , MB_OK );
}
IDispatch_Release( pRange ); pRange = NULL;
VariantClear( &varResult );
}void foobar()
{
IDispatch* pWB = OpenExcelWorkBook( L"D:\\11.xls" );
slove( pWB );
IDispatch_Release( pWB );
}int main()
{
CoInitialize( NULL );
foobar();
CoUninitialize();
}
然后就能生成相应的.h .c文件,里面有com对象的c版和c++版声明。
有声明的话,调用就没啥问题了吧。
一个是借助VC IDE和typelib的