Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > Вызов функции


Автор: maxkazar 3.2.2005, 11:19
Пытаюсь вызвать функцию

NetEnumerateTrustedDomains

которая описана в хидере lm.h (lmaccess.h) так

Код

NTSTATUS NET_API_FUNCTION
NetEnumerateTrustedDomains (
   IN LPWSTR ServerName OPTIONAL,
   OUT LPWSTR *DomainNames
   );


структура NET_API_FUNCTION описана как

Код

#if (_MSC_VER >= 800) || defined(_STDCALL_SUPPORTED)
#define NET_API_FUNCTION    __stdcall
#else
#define NET_API_FUNCTION
#endif


Привожу код для полного понимания ситуации)

Код

#include <windows.h>
#include <lm.h>
#include <stdio.h>
#pragma hdrstop


/*
*** IMPORTANT NOTE ***

The header files in at least two SDK versions are incorrect.
They declare NetEnumerateTrustedDomains() like this:
NTSTATUS
NetEnumerateTrustedDomains (
 IN LPWSTR ServerName OPTIONAL,
 OUT LPWSTR *DomainNames
 );

The _correct_ declaration is this:

NTSTATUS NET_API_FUNCTION
NetEnumerateTrustedDomains (
 IN LPWSTR ServerName OPTIONAL,
 OUT LPWSTR *DomainNames
 );

Note the added "NET_API_FUNCTION". Make sure you change your
headers (or write your own declaration)!

Cheers,

Felix.
*/



// Link with netapi32
#pragma comment( lib, "netapi32.lib" )

#define lenof(a) (sizeof(a)/sizeof((a)[0]))



int main( int argc, char *argv[] )
{
NTSTATUS ns; // for definitions, see ntstatus.h in the DDK
wchar_t server[256], *domains = 0, *p;

if ( argc != 2 )
{
 puts( "usage: netd \\\\servername" );
 return 1;
}

mbstowcs( server, argv[1], lenof( server ) - 1 );
server[lenof( server ) - 1] = L'\0';

ns = NetEnumerateTrustedDomains( server, &domains );
if ( ns )
 printf( "NETD() returned %lu [%08lXh]\n", ns, ns );

for ( p = domains; p != 0 && *p != L'\0'; p += wcslen( p ) + 1 )
 printf( "\"%S\"\n", p ); // note -- capital-S in an ANSI prog outputs Unicode

NetApiBufferFree( domains );

return ns;
}


бощем линкер выдает ошибку

test error LNK2019: unresolved external symbol _NetEnumerateTrustedDomains@8 referenced in function "long __stdcall WndProc(struct HWND__ *,unsigned int,unsigned int,long)" (?WndProc@@YGJPAUHWND__@@IIJ@Z)

в чем проблема?

Автор: srd 3.2.2005, 14:13
Судя по строчке
Код
#pragma hdrstop
делаешь ты это в Билдере. Возможно, Билдер игнорирует прагму
Код
#pragma comment( lib, "netapi32.lib" )
(это же из Visual C++). Попробуй указать этот LIB-файл непосредственно в настройках проекта.

Автор: _hunter 3.2.2005, 16:15
насколько я знаю, Builder эту диррективу нормально понимает ( можеш #pragma link попробовать )

maxkazar, а ты Note' у последовал?

Автор: srd 3.2.2005, 17:24
Странная такая функция, в MSDN про неё ни слова smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)