الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

COM Clients Using VCPP

مغلق
بدأه PerfectStranger في 6 أغسطس 2003 · 3 رد · 617 مشاهدة · في ارشيف قسم C/C++
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم و رحمة الله و بركاته

عندي استفسار حول استخدام COM في VC++ :

1- هل يمكنني استخدام COM عبر console applications ؟ أم فقط في WinApplications ?

2- استخدمت الكود المطلوب و كل التوابع الازمة ولكن هناك خطأ ربط Linking error فما السبب في ذلك ؟ أعتقد أنه هناك ربما خطوات تضمين أو اعدادات معينة للمشروع يجب أن تتم فما هي في حال ذلك ؟

علما أنني عملت التالي :

#define _WIN32_DCOM

#include

#include "MyCOM.h" // Generated by MIDL

void main()

{

IUnknown* pUnknown;

IMyInterface* pMyInterface;

HRESULT hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);

if(FAILED(hr))

cout << "CoInitializeEx failed. " << endl;

hr = CoCreateInstance(CLSID_MyCOM, NULL,

CLSCTX_INPROC_SERVER, IID_IUnknown, (void**)&pUnknown);

if(FAILED(hr))

cout << "CoCreateInstance failed. " << endl;

hr = pUnknown->QueryInterface(IID_IMyInterface, (void**)&pMyInterface);

if(FAILED(hr))

cout << "IID_IMyInterface not supported. " << endl;

pUnknown->Release();

// Do what i wanna do with my object

pMyInterface->Release();

CoUninitialize();

}

و ضمنت ملف MYCOM.lib في قائمة الربط link في خيارات المشروع و مع ذلك أحصل على أخطاء ربط Un resolved external reference على IID_IMyInterface و CLSID_MyCOM فما هي المشكلة

شكرا سلف

#2

يجب أن تعمل #import للCOM .. يفضل اضافة سطر ال #import في الملف stdafx.h ..

Coding on the Cloud and for the Cloud!

My Blog

#3

أخي و استاذي هاني أنا والله مبسوط لوجودك للإجابة عن اسئلتنا و شكرا لك (f)

أعمل import لماذا ؟؟؟ لل Dll أم لل lib أم لل tlb ؟؟؟

على كل حال أنا جربت الثلاثة و ما استفدت شئ . فما العمل ؟

#4

استدعي ال tlb ولا تنسى تجهيز ال com في التطبيق ولنفرض انه توجد com في السرفر وتدعى myCom و نريد استخدامها في تطبق تحت الdos

myCom تحتوي على ال interface ISumAtl

#import "myCom.tlb" named_guids no_namespace

//COM_SMARTPTR_TYPEDEF(ISumAtl,uuidof(ISumAtlPtr));

#include 
using namespace_std;
int main(int args,char* argv[])
{
ISumAtlPtr Sum;

::CoInitialize(NULL);
int ret=Sum.CreateInstance(CLSID_SumAtl);
if(ret != S_OK)
       cout<<"Error";
else
{
 int x=7;
int y=8;
int z;
Sum->add(x,y,&z);
cout<<" Z="<  Sum->Add()
}
}
اللهم انا نسألك علما نافعا ونعوذ بك من حماقة الجهلاء

هذا الموضوع مغلق.

مواضيع مشابهة