C++Builder
  Начало   Форум   Помощь Войти Регистрация  
Страниц: [1]   Вниз
  Печать  
Автор Тема: Перевод кода с Delphi в С++ Builder  (Прочитано 1174 раз)
Sasha
Участник


Сказали спасибо: +13/-0
Offline

Сообщений: 413


« : 27 Апрель 2015, 09:51:54 »

Здравствуйте!!

 Ребята помогите, пожалуйста, с переводом кода с Delphi на С++ Builder. Прошу сильно не пинать, но критику выслушаю!!! Вот код, который я частично переделал, но в других участках кода я не совсем понимаю, куда что вставлять.

 Есть 2 юнита. 1 юнит (Unit1.cpp) я создал автоматом при создании проекта в котором есть форма, а на форме Memo и 2 второй юнит (NLMEvents.cpp), который, необходимо соедеинить с Unit1.cpp и заносить данные в Memo.

Код на Delphi

Код
unit NLMEvents;
 
interface
 
function StartNLMEventListener: HResult;
function StopNLMEventListener: HResult;
 
implementation
 
uses
 Windows, ActiveX, NETWORKLIST_TLB, SysUtils, Unit1;
 
type
 TMyNetworkEvents = class(TInterfacedObject, INetworkEvents, INetworkConnectionEvents, INetworkListManagerEvents)
 public
   function NetworkAdded(networkId: TGUID): HResult; stdcall;
   function NetworkConnectivityChanged(networkId: TGUID; NewConnectivity: NLM_CONNECTIVITY): HResult; stdcall;
   function NetworkDeleted(networkId: TGUID): HResult; stdcall;
   function NetworkPropertyChanged(networkId: TGUID; fFlags: NLM_NETWORK_PROPERTY_CHANGE): HResult; stdcall;
   function ConnectivityChanged(NewConnectivity: NLM_CONNECTIVITY): HResult; stdcall;
   function NetworkConnectionConnectivityChanged(networkId: TGUID; NewConnectivity: NLM_CONNECTIVITY): HResult; stdcall;
   function NetworkConnectionPropertyChanged(networkId: TGUID; fFlags: NLM_NETWORK_PROPERTY_CHANGE): HResult; stdcall;
 end;
 
var
 pNLM: INetworkListManager = nil;
 dwCookie1: LongInt = -1;
 dwCookie2: LongInt = -1;
 dwCookie3: LongInt = -1;
 
const
 IID_IConnectionPointContainer: TGUID = '{B196B284-BAB4-101A-B69C-00AA00341D07}';
 //IID_IUnknown: TGUID = '{00000000-0000-0000-C000-000000000046}';
 //CLSID_NetworkListManager: TGUID = '{DCB00C01-570F-4A9B-8D69-199FDBA5723B}';
 
function TMyNetworkEvents.ConnectivityChanged(NewConnectivity: NLM_CONNECTIVITY): HResult; stdcall;
begin
 Form2.Memo1.Lines.Add('ConnectivityChanged');
 Result := S_OK;
end;
 
function TMyNetworkEvents.NetworkConnectionConnectivityChanged(networkId: TGUID; NewConnectivity: NLM_CONNECTIVITY): HResult; stdcall;
begin
 Form2.Memo1.Lines.Add('NetworkConnectionConnectivityChanged');
 Result := S_OK;
end;
 
function TMyNetworkEvents.NetworkConnectionPropertyChanged(networkId: TGUID; fFlags: NLM_NETWORK_PROPERTY_CHANGE): HResult; stdcall;
begin
 Form2.Memo1.Lines.Add('NetworkConnectionPropertyChange');
 Result := S_OK;
end;
 
function TMyNetworkEvents.NetworkAdded(networkId: TGUID): HResult; stdcall;
begin
 Form2.Memo1.Lines.Add('NetworkAdded');
 Result := S_OK;
end;
 
function TMyNetworkEvents.NetworkConnectivityChanged(networkId: TGUID; NewConnectivity: NLM_CONNECTIVITY): HResult; stdcall;
begin
 Form2.Memo1.Lines.Add('NetworkConnectivityChanged');
 Result := S_OK;
end;
 
function TMyNetworkEvents.NetworkDeleted(networkId: TGUID): HResult; stdcall;
begin
 Form2.Memo1.Lines.Add('NetworkDeleted');
 Result := S_OK;
end;
 
function TMyNetworkEvents.NetworkPropertyChanged(networkId: TGUID; fFlags: NLM_NETWORK_PROPERTY_CHANGE): HResult; stdcall;
begin
 Form2.Memo1.Lines.Add('NetworkPropertyChanged');
 Result := S_OK;
end;
 
function StartNLMEventListener: HResult;
var
 pCpc: IConnectionPointContainer;
 pConnectionPoint: IConnectionPoint;
 pSink: INetworkEvents;
begin
 if pNLM = nil then
 begin
   Result := CoCreateInstance(CLASS_NetworkListManager, nil, CLSCTX_ALL, IID_INetworkListManager, pNLM);
   if Failed(Result) then
     Exit;
 end else
 begin
   Result := S_OK;
 end;
 
 if Succeeded(pNLM.QueryInterface(IID_IConnectionPointContainer, pCpc)) then
 begin
   pSink := TMyNetworkEvents.Create as INetworkEvents;
 
   if dwCookie1 = -1 then
   begin
     if Succeeded(pCpc.FindConnectionPoint(IID_INetworkEvents, pConnectionPoint)) then
     begin
       pConnectionPoint.Advise(pSink, dwCookie1);
       pConnectionPoint := nil;
     end;
   end;
 
   if dwCookie2 = -1 then
   begin
     if Succeeded(pCpc.FindConnectionPoint(IID_INetworkConnectionEvents, pConnectionPoint)) then
     begin
       pConnectionPoint.Advise(pSink, dwCookie2);
       pConnectionPoint := nil;
     end;
   end;
 
   if dwCookie3 = -1 then
   begin
     if Succeeded(pCpc.FindConnectionPoint(IID_INetworkListManagerEvents, pConnectionPoint)) then
     begin
       pConnectionPoint.Advise(pSink, dwCookie3);
       pConnectionPoint := nil;
     end;
   end;
 end;
end;
 
function StopNLMEventListener: HResult;
var
 pCpc: IConnectionPointContainer;
 pConnectionPoint: IConnectionPoint;
begin
 if pNLM <> nil then
 begin
   if Succeeded(pNLM.QueryInterface(IID_IConnectionPointContainer, pCpc)) then
   begin
     if dwCookie1 <> -1 then
     begin
       if Succeeded(pCpc.FindConnectionPoint(IID_INetworkEvents, pConnectionPoint)) then
       begin
         pConnectionPoint.Unadvise(dwCookie1);
         pConnectionPoint := nil;
       end;
     end;
 
     if dwCookie2 <> -1 then
     begin
       if Succeeded(pCpc.FindConnectionPoint(IID_INetworkConnectionEvents, pConnectionPoint)) then
       begin
         pConnectionPoint.Unadvise(dwCookie2);
         pConnectionPoint := nil;
       end;
     end;
 
     if dwCookie3 <> -1 then
     begin
       if Succeeded(pCpc.FindConnectionPoint(IID_INetworkListManagerEvents, pConnectionPoint)) then
       begin
         pConnectionPoint.Unadvise(dwCookie3);
         pConnectionPoint := nil;
       end;
     end;
   end;
 
   pNLM := nil;
 end;
 
 dwCookie1 := -1;
 dwCookie2 := -1;
 dwCookie3 := -1;
 
 Result := S_OK;
end;
 
end.
 

Вот код на С++ Builder, который я частично переделал

NLMEvents.h

Код
#ifndef NLMEventsH
#define NLMEventsH
//---------------------------------------------------------------------------
#include
#include
#include  // здесь надо добавить наверно ещё  Windows, ActiveX, NETWORKLIST_TLBж
 
class TMyNetworkEvents : public System::TInterfacedObject  // а как  сюда вставить TInterfacedObject, INetworkEvents, INetworkConnectionEvents, INetworkListManagerEvents
{
public:
   HResult _stdcall ConnectivityChanged(NLM_CONNECTIVITY NewConnectivity);
   HResult _stdcall NetworkConnectionPropertyChanged(TGUID networkId, NLM_NETWORK_PROPERTY_CHANGE fFlags);
   HResult _stdcall NetworkAdded(TGUID networkId);
   HResult _stdcall NetworkConnectivityChanged(TGUID networkId, NLM_CONNECTIVITY NewConnectivity);
   HResult _stdcall NetworkDeleted(TGUID networkId);
   HResult _stdcall NetworkPropertyChanged(TGUID networkId, NLM_NETWORK_PROPERTY_CHANGE fFlags);
   HResult StartNLMEventListener;
   HResult StopNLMEventListener;
};
 
/*
var
 pNLM: INetworkListManager = nil;
 dwCookie1: LongInt = -1;
 dwCookie2: LongInt = -1;
 dwCookie3: LongInt = -1;                                                            ВОТ ЭТО ВСЁ ЗАКОМЕНТИРОВАННОЕ ВООБЩЕ НЕ ЗНАЮ КУДА ЛУЧШЕ ВСТАВЛЯТЬ
 
const
 IID_IConnectionPointContainer: TGUID = '{B196B284-BAB4-101A-B69C-00AA00341D07}';
*/

#endif
 
а вот NLMEvents.срр

Код
#include 
#include
#include
 
#pragma hdrstop
#include "NLMEvents.h"
 
//---------------------------------------------------------------------------
#pragma package(smart_init)
 
 
HResult _stdcall TMyNetworkEvents::ConnectivityChanged(NLM_CONNECTIVITY NewConnectivity)
{
 Form1->Memo1->Lines->Add("ConnectivityChanged");
 return S_OK;
}
//-----------------------------------------------------------------------------
HResult _stdcall TMyNetworkEvents::NetworkConnectionConnectivityChanged(TGUID networkId, NLM_CONNECTIVITY NewConnectivity)
{
 Form1->Memo1->Lines->Add("NetworkConnectionConnectivityChanged");
 return S_OK;
}
//-----------------------------------------------------------------------------
HResult _stdcall TMyNetworkEvents::NetworkConnectionPropertyChanged(TGUID networkId, NLM_NETWORK_PROPERTY_CHANGE fFlags)
{
 Form1->Memo1->Lines->Add("NetworkConnectionPropertyChange");
 return S_OK;
}
//-----------------------------------------------------------------------------
HResult _stdcall TMyNetworkEvents::NetworkAdded(TGUID networkId)
{
 Form1->Memo1->Lines->Add("NetworkAdded");
 return S_OK;
}
//-----------------------------------------------------------------------------
HResult _stdcall TMyNetworkEvents::NetworkConnectivityChanged(TGUID networkId, NLM_CONNECTIVITY NewConnectivity)
{
 Form1->Memo1->Lines->Add("NetworkConnectivityChanged");
 return S_OK;
}
//-----------------------------------------------------------------------------
HResult _stdcall TMyNetworkEvents::NetworkDeleted(TGUID networkId)
{
 Form1->Memo1->Lines->Add("NetworkDeleted");
 return S_OK;
}
//-----------------------------------------------------------------------------
HResult _stdcall TMyNetworkEvents::NetworkPropertyChanged(TGUID networkId, NLM_NETWORK_PROPERTY_CHANGE fFlags)
{
 Form1->Memo1->Lines->Add("NetworkPropertyChanged");
 return S_OK;
}
//-----------------------------------------------------------------------------
HResult StartNLMEventListener()
{
 IConnectionPointContainer *pCpc;
 IConnectionPoint *pConnectionPoint;
 INetworkEvents *pSink;
 
 if (pNLM == NULL)
 {
   if (FAILED(CoCreateInstance(CLSID_NetworkListManager, NULL, CLSCTX_ALL, IID_INetworkListManager, (void**) &pNLM)))
     {
      return 0;
     }
  else if
     {
     return S_OK;
     }
 
 if (SUCCEEDED(pNLM->QueryInterface(IID_IConnectionPointContainer, pCpc))
   {
   pSink = TMyNetworkEvents *INetworkEvents;
 
   if (dwCookie1 == -1)
   {
     if (SUCCEEDED(pCpc->FindConnectionPoint(IID_INetworkEvents, pConnectionPoint))
      {
       pConnectionPoint->Advise(pSink, dwCookie1);
       pConnectionPoint = NULL;
      }
    }
 
   if (dwCookie2 == -1)
   {
     if (SUCCEEDED(pCpc->FindConnectionPoint(IID_INetworkEvents, pConnectionPoint))
      {
       pConnectionPoint->Advise(pSink, dwCookie2);
       pConnectionPoint = NULL;
      }
    }
 
   if (dwCookie3 == -1)
   {
     if (SUCCEEDED(pCpc->FindConnectionPoint(IID_INetworkEvents, pConnectionPoint))
      {
       pConnectionPoint->Advise(pSink, dwCookie3);
       pConnectionPoint = NULL;
      }
    }
 }
}
 
//-----------------------------------------------------------------------------
HResult StopNLMEventListener()
{
IConnectionPointContainer *pCpc;
IConnectionPoint *pConnectionPoint;
 
 if (pNLM != NULL)
 {
   if (SUCCEEDED(pNLM->QueryInterface(IID_IConnectionPointContainer, pCpc))
   {
     if (dwCookie1 != -1)
     {
       if (SUCCEEDED(pCpc->FindConnectionPoint(IID_INetworkEvents, pConnectionPoint))
       {
         pConnectionPoint->Unadvise(dwCookie1);
         pConnectionPoint = NULL;
       }
     }
 
     if (dwCookie2 != -1)
     {
       if (SUCCEEDED(pCpc->FindConnectionPoint(IID_INetworkConnectionEvents, pConnectionPoint))
       {
         pConnectionPoint->Unadvise(dwCookie2);
         pConnectionPoint = NULL;
       }
     }
 
     if (dwCookie3 != -1)
     {
       if (SUCCEEDED(pCpc->FindConnectionPoint(IID_INetworkListManagerEvents, pConnectionPoint))
       {
         pConnectionPoint->Unadvise(dwCookie3);
         pConnectionPoint = NULL;
       }
     }
   }
 
   pNLM = NULL;
 }
 
 dwCookie1 = -1;
 dwCookie2 = -1;
 dwCookie3 = -1;
 
 return S_OK;
}
}
 

Unit1.cpp

Код
#include 
#pragma hdrstop
 
#include "Unit1.h"
#include "NLMEvents.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
   : TForm(Owner)
{
}
//---------------------------------------------------------------------------
 
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  




....

Powered by SMF 1.1.21 | SMF © 2025, Simple Machines
Страница сгенерирована за 0.109 секунд. Запросов: 21.