PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [C++] Problem mit SetDllDirectoryA



sn0w
01.06.2012, 23:46
Ohai Community ich hab momentan ein kleines Problem mit dieser Funktion.

#include <Windows.h>

extern BOOL WINAPI SetDllDirectoryA(LPCTSTR lpathName);

int main()
{
SetDllDirectoryA("C:\\test");
return 0;
}

Compiler: Dev C++
Fehlermeldung:

[Linker error] undefined reference to `_Z16SetDllDirectoryAPKc@4'
ld returned 1 exit status

Wäre nett, wenn mir jemand sagen könnte, wo genau mein Fehler liegt :D

MfG

Bonkers
02.06.2012, 00:22
// dll.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <Windows.h>

extern BOOL WINAPI SetDllDirectoryA(LPCTSTR lpathName);

int _tmain(int argc, _TCHAR* argv[])
{
SetDllDirectoryA("C:\\DLLHell");
return 0;
}



The program '[6028] dll.exe: Native' has exited with code 0 (0x0).

Funktioniert unter VC++ 2010 Express zumindest.

IRET
02.06.2012, 07:19
Funktionieren die anderen WinAPIs (z.B. CreateFileA())?
Ansonsten kann ich dir nur sagen, dass du die Funktion selber laden sollst, was ja nicht so toll ist ^^.


SetDllDirectoryA SetDllDirectory = (SetDllDirectoryA)GetProcAddress(LoadLibrary("kernel32.dll"), "SetDllDirectoryA");


PS: Sollten andere Funktionen aus der Kernel32.dll auch nicht funktionieren, dann schau ob du bei den Libraries die "Kernel32.lib" dabei hast.

sn0w
02.06.2012, 11:31
Also CreateFileA() geht ohne Probleme.
Anscheinend hat hat etwas mit der kernel32.dll zu tun.
Trotzdem danke für die Hilfe :)

ssddff
02.06.2012, 16:12
Leider etwas spät, aber besser als nie, hatte heute Nacht leider die Zugangsdaten für das Board nicht mehr gefunden.

Der Grund, warum du den Fehler vom Linker bekommst, ist in diesem Beitrag hier gut beschrieben:http://ubuntuforums.org/showpost.php?p=10259958&postcount=6

Du musst also einfach aus dem

extern BOOL WINAPI SetDllDirectoryA(LPCTSTR lpathName);
ein

extern "C" BOOL WINAPI SetDllDirectoryA(LPCTSTR lpathName);
machen und dann funktioniert es.