DsGetDcName Win32 API managed
-
hallo,
kann mir jemand helfen wie ich diese API in ein managed c++ projekt einbinden kann. Normale API´s sind eigentlich kein Problem, aber hier kommen structs und InPtr dazu.
MSDN: Q179891
http://windowssdk.msdn.microsoft.com/en-us/library/ms675983.aspx
http://windowssdk.msdn.microsoft.com/en-us/library/ms675912.aspx
Ich blick da leider nimmer ganz durch, normale API´s habe ich so definiert:[DllImport("user32.dll")] extern int GetSystemMenu(int hwnd,int revert);
Und danach einfach in einer Klasse aufgerufen.
Vielen Dank!!
-
Wenn Du C++/CLI verwendest, kannst Du jede C/C++ Funktion direkt aufrufen. Du braucht dafür kein P/Invoke definieren!
Also sozusagen:
#include <windows.h> #include <Dsgetdc.h>
Passendes _WIN_VER definieren und dann einfach aufrufen...
-
Hi Jochen,
verwende managed 2003 1.1 c++
Hab hier irgendwie nen namespaceproblem wenn ich die dsgetdc.h includiere:C:\Programme\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Include\WinBase.h(3139) : error C2872: 'FILETIME': Mehrdeutiges Symbol
kann 'C:\Programme\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Include\WinDef.h(354) sein: _FILETIME FILETIME'
oder 'c:\tests\testapi\APICALLClass.h(2): System::Runtime::InteropServices::FILETIME'
-
Du musst dann einfach sagen was Du willst =>
::FILETIME ft;
-
Hi Jochen, ja das Problem ist nur das er es in der windows.h wissen will und da kann ich schlecht alles überschreiben, hab jetzt mal alles rausgeworfen, jetzt bekomme ich die Meldung:
error LNK2001: Nichtaufgelöstes externes Symbol "unsigned long __stdcall DsGetDcNameA(char const *,char const *,struct _GUID *,char const *,unsigned long,struct _DOMAIN_CONTROLLER_INFOA * *)" (?DsGetDcNameA@@$$J224YGKPBD0PAU_GUID@@0KPAPAU_DOMAIN_CONTROLLER_INFOA@@@Z)
Muss ich die NetApi32.lib irgendwie linken???
wenn ja wie, Vielen Vielen Dank!
-
Schreib folgendes in eine cpp-Datei:
#pragma comment(lib, "NetApi32.lib")
-
Hi Jochen,
danke!!!! Ok kann jetzt ohne Fehler die Funktion aufrufen, werte bekomme ich jedoch noch nicht:
GUID *pGuid=new GUID; PDOMAIN_CONTROLLER_INFO *pdom=new PDOMAIN_CONTROLLER_INFO; DsGetDcName(NULL,"meinedomäne",pGuid,NULL,0,pdom); return 0;
Sollte mir doch was zurückliefern
-
Hab im SDK jetzt was gefunden, gibt aber auch nix zurück:
PDOMAIN_CONTROLLER_INFO DomainControllerInfo = NULL; DWORD dReturn = 0L; dReturn = DsGetDcName( NULL, NULL, NULL, NULL, DS_DIRECTORY_SERVICE_REQUIRED, &DomainControllerInfo );
http://windowssdk.msdn.microsoft.com/en-us/library/ms676907.aspx
-
So jetzt funzts!
Muss LPTSTR verwenden, komisch das mein debugger bei der Struktur "<Nicht definierter Wert>" anzeigt.
Danke Jochen!