Avatar billede joha0147 Nybegynder
07. november 2001 - 21:26 Der er 4 kommentarer og
1 løsning

IP???

Jeg har lige lavet et meget simpelt VB program der kan vise ens ip addresse og computernavn bare ved at kalde en active X control kaldet winsock1!

Men hvordan gør jeg det i Visual C++??

På forhånd tak!
Avatar billede alvion Nybegynder
07. november 2001 - 22:00 #1
Der bruger du bare den samme ActiveX control
Avatar billede soepro Nybegynder
08. november 2001 - 15:36 #2
I C++ Builder skal man importere ActiceX-kontrollen først - måske gælder det også MVC.
Avatar billede moykal Nybegynder
09. november 2001 - 14:42 #3
Antager at du vil gøre det i en konsol-app....
Lad os sige at du har din ActiveX-komponent i dll\'en mysock.dll:

#import \"mysock.dll\" no_namespace, named_guids

Dette genererer et par hjælpe-filer ved navn mysock.tlh og mysock.tli. I disse filer er indholdet af typelibraryet omsat til noget fornuftigt C++ info. no_namespace fjerner det namespace, der ville være blevet puttet foran (typelib-navnet). named_guids betyder at pæne navne for de GUIDS som din ActiveX server er registreret med tillige bliver populeret ind i de filer. Filerne lægges så vidt jeg husker nede i det build-specifikke direktorie, f.eks. Debug el. Release.

Lad os antage at du har defineret et interface ved navn ISock:

interface ISock : IUnknown
{
  [propget, helpstring(\"property MachineName\")] HRESULT MachineName([out, retval] BSTR *pVal);
  [propget, helpstring(\"property IP\")]
HRESULT IP([out, retval] BSTR *pVal);
}

Kig i .tlh og .tli filerne og du vil nu kunne genkende søde wrappere til disse to properties, der anvendes specielt den lækre VC++ __declcpec(property()) extension til dine props. Tillige er genereret et par navngivne GUID\'s til dine class- og interface ID\'er. Lad os dog for nemheds skyld anvende den ProgId du har givet din ActiveX, f.eks. \"MySock.ReallySux\"...

#include <iostream>
using namespace std;

:


HRESULT hr = ::CoInitialize(0);
// S_OK == hr - check dette.

try {
  ISockPtr spMySock(\"MySock.ReallySux\");
  _bstr_t bstrMachineName = spMySock->MachineName;
  _bstr_t bstrIP = spMySock->IP;

  cout << \"Machine name: \" << static_cast<char *>(bstrMachineName) << endl;
  cout << \"IP address: \" << static_cast<char *>(bstrIP) << endl;
}
catch (const _com_error &e) {
  cerr << \"Stuff went wront dude: \" << static_cast<const char *>(e.ErrorMessage) << endl;
}

Jeg garanterer ikke lige at koden kompilerer, da den er skrevet direkte i browseren, men sådan noget lignende.
Avatar billede jpk Nybegynder
11. november 2001 - 19:35 #4
Du skal muligvis modificere koden lidt (jeg bruger MFC), men det er ret simpelt

    //PC name and IP
    int argc;
    CString argv;
    WSAData wsaData;
    WSAStartup(MAKEWORD(1, 1), &wsaData);
    GetNameAndIp(argc, argv);
    WSACleanup();

int GetNameAndIp(int, CString)
{
    char ac[80];
    if (gethostname(ac, sizeof(ac)) == SOCKET_ERROR)
    {
        cerr << \"Error \" << WSAGetLastError() <<
                \" when getting local host name.\" << endl;
        return 1;
    }
    m_pc_name = \": \";
    m_pc_name += ac;

    struct hostent* phe = gethostbyname(ac);
    if (phe == 0) {
        cerr << \"Yow!  Bad host lookup.\" << endl;
        return 1;
    }
   
    for (int i = 0; phe->h_addr_list[i] != 0; ++i) {
        struct in_addr addr;
        memcpy(&addr, phe->h_addr_list[i], sizeof(struct in_addr));
        m_ip_address = i + \": \";
        m_ip_address += inet_ntoa(addr);
    }
   
    return 0;
}

Avatar billede joha0147 Nybegynder
05. marts 2002 - 17:07 #5
j
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester