Total Commander Forum Index Total Commander
Форум поддержки пользователей Total Commander
Сайты: Все о Total Commander | Totalcmd.net | Ghisler.com | RU.TCKB
 
 RulesRules   SearchSearch   FAQFAQ   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Компиляция плагинов в MinGW

 
Post new topic   Reply to topic    Total Commander Forum Index -> Написание плагинов для Total Commander printer-friendly view
View previous topic :: View next topic  
Author Message
tmp



Joined: 12 Apr 2009
Posts: 3

Post (Separately) Posted: Sun Apr 12, 2009 11:44    Post subject: Компиляция плагинов в MinGW Reply with quote

Здравствуйте. Я пишу небольшой FS-плагин для TC. Компилирую в MinGW. Проблема в том, что после выхода из FsFindClose, TC выдает окно "Access violation at address 005e4416. Read of address xxxx", причем xxxx зависит от значения HANDLE, возвращенного FsFindFirst.
Код, из которого я убрал практически всё, тоже выдает ошибку:

plugin.h
Code:

#include <windows.h>

#ifdef BUILD_DLL
/* DLL export */
#define EXPORT __declspec(dllexport)
#else
/* EXE import */
#define EXPORT __declspec(dllimport)
#endif

typedef struct {
    DWORD SizeLow,SizeHigh;
    FILETIME LastWriteTime;
    int Attr;
} RemoteInfoStruct;

typedef struct {
   int size;
   DWORD PluginInterfaceVersionLow;
   DWORD PluginInterfaceVersionHi;
   char DefaultIniName[MAX_PATH];
} FsDefaultParamStruct;

// callback functions
typedef int *tProgressProc(int PluginNr,char* SourceName,
             char* TargetName,int PercentDone);
typedef void *tLogProc(int PluginNr,int MsgType,char* LogString);
typedef BOOL *tRequestProc(int PluginNr,int RequestType,char* CustomTitle,
              char* CustomText,char* ReturnedText,int maxlen);

// Function prototypes
extern "C"
{
int FsInit(int PluginNr,tProgressProc pProgressProc,
                     tLogProc pLogProc,tRequestProc pRequestProc);
HANDLE FsFindFirst(char* Path,WIN32_FIND_DATA *FindData);
BOOL  FsFindNext(HANDLE Hdl,WIN32_FIND_DATA *FindData);
int  FsFindClose(HANDLE Hdl);
}


plugin.c
Code:

#include <plugin.h>

EXPORT int FsInit(int PluginNr, tProgressProc pProgressProc,
                     tLogProc pLogProc, tRequestProc pRequestProc)
{
    return 0;
}

EXPORT HANDLE FsFindFirst(char* Path, WIN32_FIND_DATA *FindData)
{
    return (HANDLE)0; //Здесь может быть указатель или любое другое число
}

EXPORT BOOL FsFindNext(HANDLE Hdl, WIN32_FIND_DATA *FindData)
{
    return 0;
}

EXPORT int FsFindClose(HANDLE Hdl)
{
    return 0;
}

При компиляции в MSVC никаких проблем нет. Как откомпилировать плагин в MinGW?
Back to top
View user's profile Send private message
VadiMGP



Joined: 21 Mar 2007
Posts: 1625

Post (Separately) Posted: Sun Apr 12, 2009 17:22    Post subject: Reply with quote

Сроду не пользовался MinGW, поэтому чисто фантазирую.
Возможно, для MinGW надо явно прописать _stdcall.
Back to top
View user's profile Send private message
tmp



Joined: 12 Apr 2009
Posts: 3

Post (Separately) Posted: Sun Apr 12, 2009 17:35    Post subject: Reply with quote

Если дописать __stdcall, то создаются функции с именами вроде FsInit@16 вместо FsInit. Вероятно, это можно убрать параметрами командной строки, но линкер игнорирует --kill-at
Back to top
View user's profile Send private message
VadiMGP



Joined: 21 Mar 2007
Posts: 1625

Post (Separately) Posted: Sun Apr 12, 2009 17:40    Post subject: Reply with quote

Имена экспортируемых функций укажи в файле .def
Back to top
View user's profile Send private message
tmp



Joined: 12 Apr 2009
Posts: 3

Post (Separately) Posted: Sun Apr 12, 2009 18:05    Post subject: Reply with quote

Случайно решил проблему добавлением правильного ключа линковщику: -Wl,--kill-at
Всем спасибо.
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Total Commander Forum Index -> Написание плагинов для Total Commander All times are GMT + 4 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group