Hello, guys!
I remembered, that about a year ago or more I made a review of C declarations for all PL/SQL Developer v14 callback functions. I found many mistakes in documentation file plugindoc.pdf and in header files available in PlugInDoc folder.
I like pure ASM and C and minimalism smile So, this is my version, every function was checked: some successfully used by my plugin or in test-cases, and the signatures of the rest was compared with disassembled code in IDA.

How to use it:
1. Define structure, that receive functions' addresses through RegisterCallback()
You may [un]comment any function placeholders without worrying about gaps. But note the ascending order of indexes!

Code
struct {
//int  (*SYS_Version)() = (int(*)()) 1;
//char*(*SYS_Registry)() = (char*(*)()) 2;
//char*(*SYS_RootDir)() = (char*(*)()) 3;
//char*(*SYS_OracleHome)() = (char*(*)()) 4;
//char*(*SYS_OCIDLL)() = (char*(*)()) 5;
//BOOL (*SYS_OCI8Mode)() = (BOOL(*)()) 6;
//BOOL (*SYS_XPStyle)() = (BOOL(*)()) 7;
//char*(*SYS_TNSNAMES)(char *Param) = (char*(*)(char*)) 8;
//int  (*SYS_DelphiVersion)() = (int(*)()) 9;
  void (*IDE_MenuState)(int ID, int Index, BOOL Enabled) = (void(*)(int, int, BOOL)) 10;
//BOOL (*IDE_Connected)() = (BOOL(*)()) 11;
  void (*IDE_GetConnectionInfo)(char** Username, char** Password, char** Database) = (void(*)(char**, char**, char**)) 12;
//void (*IDE_GetBrowserInfo)(char **ObjectType, char **ObjectOwner, char **ObjectName) = (void(*)(char**, char**, char**)) 13;
  int  (*IDE_GetWindowType)() = (int(*)()) 14;
//int  (*IDE_GetAppHandle)() = (int(*)()) 15;
  HWND (*IDE_GetWindowHandle)() = (HWND(*)()) 16;
//HWND (*IDE_GetClientHandle)() = (HWND(*)()) 17;
  HWND (*IDE_GetChildHandle)() = (HWND(*)()) 18;
  void (*IDE_Refresh)() = (void(*)()) 19;
//void (*IDE_CreateWindow)(int WindowType, char *Text, BOOL Execute) = (void(*)(int, char*, BOOL)) 20;
//BOOL (*IDE_OpenFile)(int WindowType, char *Filename) = (BOOL(*)(int, char*)) 21;
//BOOL (*IDE_SaveFile)() = (BOOL(*)()) 22;
//char*(*IDE_Filename)() = (char*(*)()) 23;
//void (*IDE_CloseFile)() = (void(*)()) 24;
  void (*IDE_SetReadOnly)(BOOL ReadOnly) = (void(*)(BOOL)) 25;
  BOOL (*IDE_GetReadOnly)() = (BOOL(*)()) 26;
//BOOL (*IDE_ExecuteSQLReport)(char *SQL, char *Title, BOOL Updateable) = (BOOL(*)(char*, char*, BOOL)) 27;
//BOOL (*IDE_ReloadFile)() = (BOOL(*)()) 28;
//void (*IDE_SetFilename)(char *Filename) = (void(*)(char*)) 29;
//char*(*IDE_GetText)() = (char*(*)()) 30;
  char*(*IDE_GetSelectedText)() = (char*(*)()) 31;
  char*(*IDE_GetCursorWord)() = (char*(*)()) 32;
  int  (*IDE_GetEditorHandle)() = (int(*)()) 33;
//BOOL (*IDE_SetText)(char *Text) = (BOOL(*)(char*)) 34;
//BOOL (*IDE_SetStatusMessage)(char *Text) = (BOOL(*)(char*)) 35;
//BOOL (*IDE_SetErrorPosition)(int Line, int Col) = (BOOL(*)(int, int)) 36;
//void (*IDE_ClearErrorPositions)() = (void(*)()) 37;
//int  (*IDE_GetCursorWordPosition)() = (int(*)()) 38;
//BOOL (*IDE_Perform)(int Param) = (BOOL(*)(int)) 39;
//int  (*SQL_Execute)(char *SQL) = (int(*)(char*)) 40;
//int  (*SQL_FieldCount)() = (int(*)()) 41;
//BOOL (*SQL_Eof)() = (BOOL(*)()) 42;
//int  (*SQL_Next)() = (int(*)()) 43;
//char*(*SQL_Field)(int Field) = (char*(*)(int)) 44;
//char*(*SQL_FieldName)(int Field) = (char*(*)(int)) 45;
//int  (*SQL_FieldIndex)(char *Name) = (int(*)(char*)) 46;
//int  (*SQL_FieldType)(int Field) = (int(*)(int)) 47;
//char*(*SQL_ErrorMessage)() = (char*(*)()) 48;
//BOOL (*SQL_UsePlugInSession)(int PlugInID) = (BOOL(*)(int)) 50;
//void (*SQL_UseDefaultSession)(int PlugInID) = (void(*)(int)) 51;
//BOOL (*SQL_CheckConnection)() = (BOOL(*)()) 52;
//char*(*SQL_GetDBMSGetOutput)() = (char*(*)()) 53;
//void (*SQL_SetVariable)(char *Name, char *Value) = (void(*)(char*, char*)) 54;
//char*(*SQL_GetVariable)(char *Name) = (char*(*)(char*)) 55;
//void (*SQL_ClearVariables)() = (void(*)()) 56;
//BOOL (*SQL_SetPlugInSession)(int PlugInID, char *Username, char *Password, char *Database, char *ConnectAs) = (BOOL(*)(int, char*, char*, char*, char*)) 57;
//char*(*IDE_GetCustomKeywords)() = (char*(*)()) 60;
//void (*IDE_SetCustomKeywords)(char *Keywords) = (void(*)(char*)) 61;
//void (*IDE_SetKeywords)(int ID, int Style, char *Keywords) = (void(*)(int, int, char*)) 62;
//void (*IDE_ActivateKeywords)() = (void(*)()) 63;
//void (*IDE_RefreshMenus)(int ID) = (void(*)(int)) 64;
//void (*IDE_SetMenuName)(int ID, int Index, char *Name) = (void(*)(int, int, char*)) 65;
//void (*IDE_SetMenuCheck)(int ID, int Index, BOOL Enabled) = (void(*)(int, int, BOOL)) 66;
//void (*IDE_SetMenuVisible)(int ID, int Index, BOOL Enabled) = (void(*)(int, int, BOOL)) 67;
//char*(*IDE_GetMenulayout)() = (char*(*)()) 68;
//void (*IDE_CreatePopupItem)(int ID, int Index, char *Name, char *ObjectType) = (void(*)(int, int, char*, char*)) 69;
//BOOL (*IDE_SetConnection)(char *Username, char *Password, char *Database) = (BOOL(*)(char*, char*, char*)) 70;
//void (*IDE_GetObjectInfo)(char *AnObject, char **ObjectType, char **ObjectOwner, char **ObjectName, char **SubObject) = (void(*)(char*, char**, char**, char**, char**)) 71;
//char*(*IDE_GetBrowserItems)(char *Node, BOOL GetItems) = (char*(*)(char*, BOOL)) 72;
//void (*IDE_RefreshBrowser)(char *Node) = (void(*)(char*)) 73;
//void (*IDE_GetPopupObject)(char **ObjectType, char **ObjectOwner, char **ObjectName, char **SubObject) = (void(*)(char**, char**, char**, char**)) 74;
//char*(*IDE_GetPopupBrowserRoot)() = (char*(*)()) 75;
//void (*IDE_RefreshObject)(char *ObjectType, char *ObjectOwner, char *ObjectName, int Action) = (void(*)(char*, char*, char*, int)) 76;
//BOOL (*IDE_FirstSelectedObject)(char **ObjectType, char **ObjectOwner, char **ObjectName, char **SubObject) = (BOOL(*)(char**, char**, char**, char**)) 77;
//BOOL (*IDE_NextSelectedObject)(char **ObjectType, char **ObjectOwner, char **ObjectName, char **SubObject) = (BOOL(*)(char**, char**, char**, char**)) 78;
//char*(*IDE_GetObjectSource)(char *ObjectType, char *ObjectOwner, char *ObjectName) = (char*(*)(char*, char*, char*)) 79;
//int  (*IDE_GetWindowCount)() = (int(*)()) 80;
//BOOL (*IDE_SelectWindow)(int Index) = (BOOL(*)(int)) 81;
  BOOL (*IDE_ActivateWindow)(HWND Index) = (BOOL(*)(HWND)) 82;
//BOOL (*IDE_WindowIsModified)() = (BOOL(*)()) 83;
//BOOL (*IDE_WindowIsRunning)() = (BOOL(*)()) 84;
//int  (*IDE_WindowPin)(int Pin) = (int(*)(int)) 85;
//void (*IDE_SplashCreate)(int ProgressMax) = (void(*)(int)) 90;
//void (*IDE_SplashHide)() = (void(*)()) 91;
//void (*IDE_SplashWrite)(char *s) = (void(*)(char*)) 92;
//void (*IDE_SplashWriteLn)(char *s) = (void(*)(char*)) 93;
//void (*IDE_SplashProgress)(int Progress) = (void(*)(int)) 94;
//char*(*IDE_TemplatePath)() = (char*(*)()) 95;
//BOOL (*IDE_ExecuteTemplate)(char *Template, BOOL NewWindow) = (BOOL(*)(char*, BOOL)) 96;
//char*(*IDE_GetConnectAs)() = (char*(*)()) 97;
//BOOL (*IDE_SetConnectionAs)(char *Username, char *Password, char *Database, char *ConnectAs) = (BOOL(*)(char*, char*, char*, char*)) 98;
//char*(*IDE_GetFileOpenMenu)(int MenuIndex, int *WindowType) = (char*(*)(int, int*)) 100;
//BOOL (*IDE_CanSaveWindow)() = (BOOL(*)()) 101;
//void (*IDE_OpenFileExternal)(int WindowType, char *Data, char *FileSystem, char *Tag, char *Filename) = (void(*)(int, char*, char*, char*, char*)) 102;
//char*(*IDE_GetFileTypes)(int WindowType) = (char*(*)(int)) 103;
//char*(*IDE_GetDefaultExtension)(int WindowType) = (char*(*)(int)) 104;
//char*(*IDE_GetFiledata)() = (char*(*)()) 105;
//void (*IDE_FileSaved)(char *FileSystem, char *FileTag, char *Filename) = (void(*)(char*, char*, char*)) 106;
//BOOL (*IDE_ShowHTML)(char *Url, char *Hash, char *Title, char *ID) = (BOOL(*)(char*, char*, char*, char*)) 107;
//BOOL (*IDE_RefreshHTML)(char *Url, char *ID, BOOL BringToFront) = (BOOL(*)(char*, char*, BOOL)) 108;
//char*(*IDE_GetProcEditExtension)(char *oType) = (char*(*)(char*)) 109;
//BOOL (*IDE_GetWindowObject)(char **ObjectType, char **ObjectOwner, char **ObjectName, char **SubObject) = (BOOL(*)(char**, char**, char**, char**)) 110;
//char*(*IDE_FirstSelectedFile) (BOOL Files, BOOL Directories) = (char*(*) (BOOL, BOOL)) 111;
//char*(*IDE_NextSelectedFile)() = (char*(*)()) 112;
//void (*IDE_RefreshFileBrowser)() = (void(*)()) 113;
//void (*IDE_KeyPress)(int Key, int Shift) = (void(*)(int, int)) 120;
  int  (*IDE_GetMenuItem)(char *MenuName) = (int(*)(char*)) 121;
  BOOL (*IDE_SelectMenu)(int MenuItem) = (BOOL(*)(int)) 122;
//char*(*IDE_GetMenuItemLayout)() = (char*(*)()) 123;
//char*(*IDE_TranslationFile)() = (char*(*)()) 130;
//char*(*IDE_TranslationLanguage)() = (char*(*)()) 131;
//char*(*IDE_GetTranslatedMenuLayout)() = (char*(*)()) 132;
//char*(*IDE_MainFont)() = (char*(*)()) 133;
//char*(*IDE_TranslateItems)(char *Group) = (char*(*)(char*)) 134;
//char*(*IDE_TranslateString)(char *ID, char *Default, char *Param1, char *Param2) = (char*(*)(char*, char*, char*, char*)) 135;
//BOOL (*IDE_SaveRecoveryFiles)() = (BOOL(*)()) 140;
  int  (*IDE_GetCursorX)() = (int(*)()) 141;
  int  (*IDE_GetCursorY)() = (int(*)()) 142;
  void (*IDE_SetCursor)(int X, int Y) = (void(*)(int, int)) 143;
  int  (*IDE_SetBookmark)(int Index, int X, int Y) = (int(*)(int, int, int)) 144;
  void (*IDE_ClearBookmark)(int Index) = (void(*)(int)) 145;
  void (*IDE_GotoBookmark)(int Index) = (void(*)(int)) 146;
  BOOL (*IDE_GetBookmark)(int Index, int *X, int *Y) = (BOOL(*)(int, int*, int*)) 147;
//char*(*IDE_TabInfo)(int Index) = (char*(*)(int)) 148;
//int  (*IDE_TabIndex)(int Index) = (int(*)(int)) 149;
//void (*IDE_CreateToolButton)(int ID, int Index, char *Name, char *BitmapFile, HBITMAP BitmapHandle) = (void(*)(int, int, char*, char*, HBITMAP)) 150;
//void (*IDE_ShowToolButtonMenu)(int ID, int Index, char *Name, char *Items) = (void(*)(int, int, char*, char*)) 151;
//BOOL (*IDE_WindowHasEditor)(BOOL CodeEditor) = (BOOL(*)(BOOL)) 153;
  int  (*IDE_GetCursorWordOffset)() = (int(*)()) 154;
//void (*IDE_SetSelectedText)(char *p) = (void(*)(char*)) 155;
//int  (*IDE_BeautifierOptions)() = (int(*)()) 160;
//BOOL (*IDE_BeautifyWindow)() = (BOOL(*)()) 161;
//char*(*IDE_BeautifyText)(char *s) = (char*(*)(char*)) 162;
//BOOL (*IDE_ObjectAction)(char *Action, char *ObjectType, char *ObjectOwner, char *ObjectName) = (BOOL(*)(char*, char*, char*, char*)) 165;
//BOOL (*IDE_ShowDialog)(char *Dialog, char *Param) = (BOOL(*)(char*, char*)) 166;
//char*(*IDE_MainApplication)() = (char*(*)()) 170;
//int  (*IDE_MainForm)() = (int(*)()) 171;
//int  (*IDE_Mouse)(int) = (int(*)(int)) 172;
  void (*IDE_DebugLog)(char *Msg) = (void(*)(char*)) 173;
//char*(*IDE_GetParamString)(char *Name) = (char*(*)(char*)) 174;
//BOOL (*IDE_GetParamBool)(char *Name) = (BOOL(*)(char*)) 175;
//void (*IDE_GetBrowserFilter)(int Index, char **Name, char **WhereClause, char **OrderByClause, char **User, BOOL *Active) = (void(*)(int, char**, char**, char**, char**, BOOL*)) 176;
//char*(*IDE_GetSyntaxAnalyzer)(char *Name) = (char*(*)(char*)) 177;
//int  (*IDE_GetAppHandleEx)() = (int(*)()) 178;
//void (*IDE_CommandFeedback)(int FeedbackHandle, char *s) = (void(*)(int, char*)) 180;
//int  (*IDE_ResultGridRowCount)() = (int(*)()) 190;
//int  (*IDE_ResultGridColCount)() = (int(*)()) 191;
//char*(*IDE_ResultGridCell)(int Col, int Row) = (char*(*)(int, int)) 192;
//int  (*IDE_ResultGridVisibleColCount)() = (int(*)()) 193;
//BOOL (*IDE_Authorized)(char *Category, char *Name, char *SubName) = (BOOL(*)(char*, char*, char*)) 200;
//BOOL (*IDE_WindowAllowed)(int WindowType, BOOL ShowErrorMessage) = (BOOL(*)(int, BOOL)) 201;
//BOOL (*IDE_Authorization)() = (BOOL(*)()) 202;
//char*(*IDE_AuthorizationItems)(char *Category) = (char*(*)(char*)) 203;
//void (*IDE_AddAuthorizationItem)(int PlugInID, char *Name) = (void(*)(int, char*)) 204;
//char*(*IDE_GetPersonalPrefSets)() = (char*(*)()) 210;
//char*(*IDE_GetDefaultPrefSets)() = (char*(*)()) 211;
//char*(*IDE_GetPrefAsString)(int PlugInID, char *PrefSet, char *Name, char *Default) = (char*(*)(int, char*, char*, char*)) 212;
//int  (*IDE_GetPrefAsInteger)(int PlugInID, char *PrefSet, char *Name, int Default) = (int(*)(int, char*, char*, int)) 213;
//BOOL (*IDE_GetPrefAsBool)(int PlugInID, char *PrefSet, char *Name, BOOL Default) = (BOOL(*)(int, char*, char*, BOOL)) 214;
//BOOL (*IDE_SetPrefAsString)(int PlugInID, char *PrefSet, char *Name, char *Value) = (BOOL(*)(int, char*, char*, char*)) 215;
//BOOL (*IDE_SetPrefAsInteger)(int PlugInID, char *PrefSet, char *Name, int Value) = (BOOL(*)(int, char*, char*, int)) 216;
//BOOL (*IDE_SetPrefAsBool)(int PlugInID, char *PrefSet, char *Name, BOOL Value) = (BOOL(*)(int, char*, char*, BOOL)) 217;
//char*(*IDE_GetGeneralPref)(char *Name) = (char*(*)(char*)) 218;
//BOOL (*IDE_PlugInSetting)(int PlugInID, char *Setting, char *Value) = (BOOL(*)(int, char*, char*)) 219;
//int  (*IDE_GetProcOverloadCount)(char *Owner, char *PackageName, char *ProcedureName) = (int(*)(char*, char*, char*)) 220;
//int  (*IDE_SelectProcOverloading)(char *Owner, char *PackageName, char *ProcedureName) = (int(*)(char*, char*, char*)) 221;
//char*(*IDE_GetSessionValue)(char *Name) = (char*(*)(char*)) 230;
//BOOL (*IDE_CheckDBVersion)(char *Version) = (BOOL(*)(char*)) 231;
//BOOL (*IDE_GetConnectionInfoEx)(int ix, char **Username, char **Password, char **Database, char **ConnectAs) = (BOOL(*)(int, char**, char**, char**, char**)) 240;
//int  (*IDE_FindConnection)(char *Username, char *Database, char *ConnectAs) = (int(*)(char*, char*, char*)) 241;
//int  (*IDE_AddConnection)(char *Username, char *Password, char *Database, char *ConnectAs) = (int(*)(char*, char*, char*, char*)) 242;
//BOOL (*IDE_ConnectConnection)(int ix) = (BOOL(*)(int)) 243;
//BOOL (*IDE_SetMainConnection)(int ix) = (BOOL(*)(int)) 244;
//int  (*IDE_GetWindowConnection)() = (int(*)()) 245;
//BOOL (*IDE_SetWindowConnection)(int x) = (BOOL(*)(int)) 246;
//BOOL (*IDE_GetConnectionTree)(int ix, char **Description, char **Username, char **Password, char **Database, char **ConnectAs, int *ID, int *ParentID) = (BOOL(*)(int, char**, char**, char**, char**, char**, int*, int*)) 247;
//BOOL (*IDE_GetConnectionInfoEx10)(int ix, char **Username, char **Password, char **Database, char **ConnectAs, char **Edition, char **Workspace) = (BOOL(*)(int, char**, char**, char**, char**, char**, char**)) 250;
//int  (*IDE_FindConnectionEx10)(char *Username, char *Database, char *ConnectAs, char *Edition, char *Workspace) = (int(*)(char*, char*, char*, char*, char*)) 251;
//int  (*IDE_AddConnectionEx10)(char *Username, char *Password, char *Database, char *ConnectAs, char *Edition, char *Workspace) = (int(*)(char*, char*, char*, char*, char*, char*)) 252;
//BOOL (*IDE_GetConnectionTreeEx10)(int ix, char **Description, char **Username, char **Password, char **Database, char **ConnectAs, char **Edition, char **Workspace, int *ID, int *ParentID) = (BOOL(*)(int, char**, char**, char**, char**, char**, char**, char**, int*, int*)) 253;
//void (*IDE_ShowDifferences)(int PlugInID, char *Caption1, char *String1, char *Caption2, char *String2) = (void(*)(int, char*, char*, char*, char*)) 260;
//void (*IDE_GetDiffPrefs)(BOOL *IgnoreCase, BOOL *IgnoreSpace, BOOL *IgnoreComment) = (void(*)(BOOL*, BOOL*, BOOL*)) 261;
//void (*IDE_SetDiffPrefs)(BOOL IgnoreCase, BOOL IgnoreSpace, BOOL IgnoreComment) = (void(*)(BOOL, BOOL, BOOL)) 262;
//int  (*IDE_TestDifferences)(int PlugInID, char *Caption1, char *String1, char *Caption2, char *String2) = (int(*)(int, char*, char*, char*, char*)) 263;
//char*(*IDE_GetUserPref)(char *Name) = (char*(*)(char*)) 266;
//BOOL (*IDE_SetUserPref)(char *Name, char *Value) = (BOOL(*)(char*, char*)) 267;
//void (*IDE_ApplyUserPrefs)() = (void(*)()) 268;
//int  (*IDE_290)() = (int(*)()) 290;
//void*(*IDE_291)(char *p) = (void*(*)(char*)) 291;
//char*(*SYS_OracleHomeName)() = (char*(*)()) 300;
} f;

2. RegisterCallback() source
Code
__declspec(dllexport) void RegisterCallback(int Index, void* Addr) {
  for (void **p = (void**)&f; p < (void**)&f+sizeof(f)/sizeof(void*); p++) {
    if (*(int*)p == Index) {
      *p = Addr;
      break;
    }
  }
}

3. Usage of functions:
Code
f.IDE_DebugLog(sError);
...
char *username, *password, *database, s[256];
f.IDE_GetConnectionInfo(&username, &password, &database);
...
f.IDE_SetReadOnly(!f.IDE_GetReadOnly());
...
int g_menu_FR = f.IDE_GetMenuItem("Edit / Search / Find  Replace");
...
BOOL bm_exists = f.IDE_GetBookmark(Index, &bookX, &bookY);

Maybe it helps someone.

Last edited by lost; 01/18/23 07:45 PM.