用VC写了一个简单的COM,使用ASP调用成功,怎么用VC调用呢?

解决方案 »

  1.   

    假设你的COM叫Simple_ATL工程。   保存并关闭Simple_ATL工程,然后创建一个新的Win32 控制台应用程序。选择“Win32 Console Application”并取名为“Test_ATL”。单击OK按钮并接受对话框中的缺省设置(空的工程)。单击“Finish”按钮,然后再按OK按钮。这样就创建好了一个空的工程。按下“Control+N”键向工程中添加一个文件。从弹出的窗口中选择“C++ Source File”并为它取名为“Test_ATL.cpp”。按下OK按钮。这样工程中就有了一个空的.CPP文件。我们要在这个文件中添加一些测试COM服务器的代码:// 将头文件的目录指到Simple_ATL工程所在的目录#include "..\Simple_ATL\Simple_ATL.h"
    #include <iostream.h>
    // 从Simple_ATL 工程所在目录的Simple_ATL_i.c 文件中拷贝以下内容
    // 注意: 你也可以不拷贝这些东西,而是把文件Simple_ATL_i.c包含进来。
    // 我之所以将它拷进来,是想更清楚地展示这些敞亮来自什么地方一击它们的代码
    // 不要直接拷贝以下这些IID,最好写成#include "..\Simple_ATL\Simple_ATL_i.c"
    const IID IID_IFirst_ATL = 
    {0xC8F6E230,0x2672,0x11D3,{0xA8,0xA8,0x00,0x10,0x5A,0xA9,0x43,0xDF}};const CLSID CLSID_First_ATL = 
    {0x970599E0,0x2673,0x11D3,{0xA8,0xA8,0x00,0x10,0x5A,0xA9,0x43,0xDF}};void main(void)
    {
    // 声明HRESULT和Simple_ATL接口指针
    HRESULT hr;
    IFirst_ATL *IFirstATL = NULL;// 初始化COM
    hr = CoInitialize(0);// 使用SUCCEEDED 宏并检查我们是否能得到一个接口指针 
    if(SUCCEEDED(hr))
    {
    hr = CoCreateInstance( CLSID_First_ATL, NULL, CLSCTX_INPROC_SERVER,
    IID_IFirst_ATL, (void**) &IFirstATL);// 如果成功,则调用AddNumbers方法,否则显示相应的出错信息
    if(SUCCEEDED(hr))
    {
    long ReturnValue;IFirstATL->AddNumbers(5, 7, &ReturnValue);
    cout << "The answer for 5 + 7 is: " << ReturnValue << endl;
    IFirstATL->Release(); 
    }
    else
    {
    cout << "CoCreateInstance Failed." << endl;
    }
    }
    // 释放COM
    CoUninitialize();
    }
    编译并运行测试程序
       按下“F5”功能键,编译测试程序,然后按“Control+F5”功能组合键运行测试程序。在DOS窗口中,你应该能看到输出的结果。