Author Topic: DLLC status  (Read 8866 times)

0 Members and 1 Guest are viewing this topic.

John

  • Hero Member
  • *****
  • Posts: 3779
DLLC status
« on: April 21, 2020, 12:54:18 PM »
Charles,

I would like to use DLLC's FFI definition and calling functionality in Windows 32 bit. Does this update work with core DLLC functionality?

Charles Pegge

  • Admin Support Member
  • *****
  • Posts: 4409
    • Oxygen Basic
Re: DLLC status
« Reply #1 on: April 21, 2020, 02:03:18 PM »
Hi John, hang on to the previous version. There's a glitch.

John

  • Hero Member
  • *****
  • Posts: 3779
Re: DLLC status
« Reply #2 on: April 21, 2020, 07:17:21 PM »
Not in a rush. Let me know when you solved it. Thanks!

Not doing anything with threading or IUP with DLLC. All I'm after is a FFI and C types and structures. The virtual DLL feature is nice.

Charles Pegge

  • Admin Support Member
  • *****
  • Posts: 4409
    • Oxygen Basic
Re: DLLC status
« Reply #3 on: April 22, 2020, 06:19:43 AM »
Hi John,

In DllcBuild.o2bas:

sys CallBackTable[16]

should be:

sys CallBackTable[32]

This is all that needs to be done, but i have re-posted OxygenBasicProgress.zip

The array overflow caused the whole DLL to be inoperable!



John

  • Hero Member
  • *****
  • Posts: 3779
Re: DLLC status
« Reply #4 on: April 22, 2020, 10:29:37 PM »
Outstanding!  Thanks.

Just in time for my new SBWin32 Inno installer that was recompile on Windows 10 Pro using TDM-GCC-32. I wanted to include DLLC in the build.

Curious. How difficult do you think it would be to convert your FFI DLLC code to C so I can use it with Linux shared objects?


C:\OxygenBasic\projectsC\ScriptBasic>BuildInstallDLLC.bat

C:\OxygenBasic\projectsC\ScriptBasic>..\..\co2 DLLCbuild.o2bas

C:\OxygenBasic\projectsC\ScriptBasic>..\..\co2 DLLCtestDLL.o2bas

C:\OxygenBasic\projectsC\ScriptBasic>copy ..\..\Oxygen.dll  \ScriptBasic\modules
        1 file(s) copied.

C:\OxygenBasic\projectsC\ScriptBasic>copy DLLC*.dll          \ScriptBasic\modules
dllc.dll
DLLCtestDLL.dll
        2 file(s) copied.

C:\OxygenBasic\projectsC\ScriptBasic>pause
Press any key to continue . . .

C:\OxygenBasic\projectsC\ScriptBasic>


I gave most of the ScriptBasic / DLLC test programs a try and all seems good on my Windows 10 Pro laptop.
« Last Edit: April 22, 2020, 11:53:22 PM by John »

John

  • Hero Member
  • *****
  • Posts: 3779
Re: DLLC status
« Reply #5 on: April 23, 2020, 09:59:55 AM »
Charles,

I noticed your DLLC build script copies Oxygen and the test dll into modules. That directory isn't in the system path and only ScriptBasic extension modules can be found there. The bin is in the system path and where I put dependency executables like the IUP DLLs. ScriptBasic can be installed anywhere. I will try to move them to bin and see how that works out not using hard coded paths.


John

  • Hero Member
  • *****
  • Posts: 3779
Re: DLLC status
« Reply #6 on: April 24, 2020, 07:46:00 PM »
Charles,

What is a safe array as referenced in the COM / VB world?

Can they be accessed using your existing  COM interface in DLLC?

This may help.

Quote
Thatís because the safe array is a polymorphic C array structure and the data stored in it can be of many different types, from integers of different sizes, to floating point numbers, to BSTR strings, to COM IUnknown interface pointers, and so on.
« Last Edit: April 24, 2020, 07:54:48 PM by John »

John

  • Hero Member
  • *****
  • Posts: 3779
Re: DLLC status
« Reply #7 on: April 25, 2020, 04:48:13 PM »
Charles,

I'm trying get a COM/OLE automation driven Windows GUI in an OCX (DLL) to work with ScriptBasic's COM extension module. Problem is the event callback references a function pointer as an argument. I'm thinking that I can wrap the event handler like the other languages that have bindings. Can you take a peek and see if I can capture events and do an ICALL() to a SB function/sub?

WSO Home Page

WSO 1.1: WindowSystemObject Interface Reference

Here is my WSO ScriptBasic test form. (no event support)

Code: Script BASIC
  1. ' WSO Test Dialog
  2.  
  3. IMPORT com.sbi
  4.  
  5. o = COM::CREATE(:SET, "Scripting.WindowSystemObject")
  6.  
  7. COM::CBN(o, "EnableVisualStyles", :LET, TRUE)
  8.  
  9. f = COM::CBN(o, "CreateForm", :CALL, 0, 0, 0, 0)
  10.  
  11. COM::CBN(f, "Text", :LET, "WSO")
  12. COM::CBN(f, "ClientWidth", :LET, 200)
  13. COM::CBN(f, "ClientHeight", :LET, 100)
  14. COM::CBN(f, "CenterControl")
  15.  
  16. Button = COM::CBN(f, "CreateButton", :CALL, 120, 70, 75, 25, "Close")
  17.  
  18. COM::CBN(f, "Show")
  19.  
  20. COM::CBN(o, "Run")
  21. COM::RELEASE(f)
  22. COM::RELEASE(o)
  23.  



« Last Edit: April 26, 2020, 01:11:52 AM by John »

John

  • Hero Member
  • *****
  • Posts: 3779
Re: DLLC status
« Reply #8 on: April 26, 2020, 02:30:38 PM »
This is the problem I need to solve.

Code: Script BASIC
  1. COM::CBN(Button, "OnClick", :CALL, function_address)
  2.  

Can I use DLLC to create a virtual function to call back to which would return me back to ScriptBasic so I could do an ICALL() to a SB FUNCTION/SUB before returning to the WSO message event loop?

John

  • Hero Member
  • *****
  • Posts: 3779
Re: DLLC status
« Reply #9 on: April 26, 2020, 03:33:10 PM »
Charles,

I  was looking  at  Dave Zimmer's COM.dll extension module and noticed  this exported function. Not sure if the function exists in the DLL and if it's a SB style call or standard DLL call.

Code: C
  1. VARIANT __stdcall SBCallBackEx(int EntryPoint, VARIANT *pVal)
  2. {
  3. #pragma EXPORT
  4.  
  5.   pSupportTable pSt = g_pSt;
  6.   VARIABLE FunctionResult;
  7.   _variant_t vRet;
  8.  
  9.   if(pSt==NULL){
  10.           MessageBox(0,"pSupportTable is not set?","",0);
  11.           return vRet.Detach();
  12.   }
  13.  
  14.     USES_CONVERSION;
  15.         char buf[1024]={0};
  16.     HRESULT hr;
  17.         long lResult;
  18.         long lb;
  19.         long ub;
  20.     SAFEARRAY *pSA = NULL;
  21.  
  22.         //we only accept variant arrays..
  23.         if (V_VT(pVal) == (VT_ARRAY | VT_VARIANT | VT_BYREF)) //24588
  24.                 pSA = *(pVal->pparray);
  25.         //else if (V_ISARRAY(pVal) && V_ISBYREF(pVal)) //array of longs here didnt work out maybe latter
  26.         //      pSA = *(pVal->pparray);
  27.         else
  28.         {
  29.                 if (V_VT(pVal) == (VT_ARRAY | VT_VARIANT))
  30.                         pSA = pVal->parray;
  31.                 else
  32.                         return vRet.Detach();//"Type Mismatch [in] Parameter."
  33.         };
  34.  
  35.     long dim = SafeArrayGetDim(pSA);
  36.         if(dim != 1) return vRet.Detach();
  37.  
  38.         lResult = SafeArrayGetLBound(pSA,1,&lb);
  39.         lResult = SafeArrayGetUBound(pSA,1,&ub);
  40.  
  41.         lResult=SafeArrayLock(pSA);
  42.     if(lResult) return vRet.Detach();
  43.  
  44.     _variant_t vOut;
  45.         _bstr_t cs;
  46.  
  47.         int sz = ub-lb+1;
  48.     VARIABLE pArg = besNEWARRAY(0,sz);
  49.  
  50.         //here we proxy the array of COM types into the array of script basic types element by element.
  51.         //      note this we only support longs and strings. floats will be rounded, objects converted to objptr()
  52.         //  bytes and integers are ok too..basically just not float and currency..which SB doesnt support anyway..
  53.     for (long l=lb; l<=ub; l++) {
  54.                 if( SafeArrayGetElement(pSA, &l, &vOut) == S_OK ){
  55.                         if(vOut.vt == VT_BSTR){
  56.                                 char* cstr = __B2C(vOut.bstrVal);
  57.                                 int slen = strlen(cstr);
  58.                                 pArg->Value.aValue[l] = besNEWMORTALSTRING(slen);
  59.                                 memcpy(STRINGVALUE(pArg->Value.aValue[l]),cstr,slen);
  60.                                 free(cstr);
  61.                         }
  62.                         else{
  63.                                 if(vOut.vt == VT_DISPATCH){
  64.                                         //todo register handle? but how do we know the lifetime of it..
  65.                                         //might only be valid until this exits, or forever?
  66.                                 }
  67.                                 pArg->Value.aValue[l] = besNEWMORTALLONG;
  68.                                 LONGVALUE(pArg->Value.aValue[l]) = vOut.lVal;
  69.                         }
  70.                 }
  71.     }
  72.  
  73.   lResult=SafeArrayUnlock(pSA);
  74.   if (lResult) return vRet.Detach();
  75.  
  76.   besHOOK_CALLSCRIBAFUNCTION(EntryPoint,
  77.                                                          pArg->Value.aValue,
  78.                              sz,
  79.                              &FunctionResult);
  80.  
  81.   for (long l=0; l <= sz; l++) {
  82.          besRELEASE(pArg->Value.aValue[l]);
  83.      pArg->Value.aValue[l] = NULL;
  84.   }
  85.        
  86.   if(FunctionResult->vType == VTYPE_STRING){
  87.         char* myStr = GetCString(FunctionResult);
  88.         vRet.SetString(myStr);
  89.         free(myStr);
  90.   }
  91.   else{
  92.           switch( TYPE(FunctionResult) )
  93.           {      
  94.                 case VTYPE_DOUBLE:
  95.                 case VTYPE_ARRAY:
  96.                 case VTYPE_REF:
  97.                                 MessageBoxA(0,"Arguments of script basic types [double, ref, array] not supported","Error",0);
  98.                                 break;
  99.                 default:
  100.                                 vRet = LONGVALUE(FunctionResult);
  101.           }
  102.   }
  103.  
  104.   besRELEASE(pArg);
  105.   besRELEASE(FunctionResult);
  106.  
  107.   return vRet.Detach();
  108. }
  109.  

This is the results of the COM extensions Display Interface function  on the WSO object.


Interface: IWindowSystemObject
ProgID: Scripting.WindowSystemObject.1
CLSID: {4CE85115-9B90-419F-9193-1C10C75E1383}
Function CreateForm([Left As Long = 0], [Top As Long = 0], [Width As Long = 0], [Height As Long = 0], [Style As Long = 13565952], pControl As Object) As Hresult
Function CreateDialogForm([Left As Long = 0], [Top As Long = 0], [Width As Long = 0], [Height As Long = 0], [Style As Long = 13107200], pControl As Object) As Hresult
Function CreateImageList(pControl As Object) As Hresult
Function CreateTimer(pControl As Object) As Hresult
Function CreateCOMEvents(COMObject As Object, pControl As Object) As Hresult
Function CreateFindDialog([FindText As String], [Flags As Long = 1], pResult As Object) As Hresult
Function CreateReplaceDialog([FindText As String], [ReplaceText As String], [Flags As Long = 1], pResult As Object) As Hresult
Function CreateTrayIcon(pControl As Object) As Hresult
Function Run() As Hresult
Function Stop() As Hresult
Get Controls(pVal As Object) As Hresult
Function Translate(Text As String, pResult As Object) As Hresult
Function LoadImage(Path As String, pResult As Object) As Hresult
Get Version(pVal As Object) As Hresult
Get Debug(pVal As Object) As Hresult
Let Debug(pVal As Boolean) As Hresult
Function About() As Hresult
Get Regions(pVal As Object) As Hresult
Get PixelsPerInch(pVal As Object) As Hresult
Let PixelsPerInch(pVal As Long) As Hresult
Get Screen(pVal As Object) As Hresult
Function CreateEventHandler(pControl As Object) As Hresult
Get EnableVisualStyles(pVal As Object) As Hresult
Let EnableVisualStyles(pVal As Boolean) As Hresult
Function CreatePrintInfo(pControl As Object) As Hresult
Function CreateStdDispatch(TypeLibrary As String, Major As Long, Minor As Long, Guid As String, Object As VT_UNKNOWN, pControl As Object) As Hresult
Get Console(pControl As Object) As Hresult
Get ActiveForm(pVal As Object) As Hresult
Get ForegroundForm(pVal As Object) As Hresult
Function VirtualKeyCodeToString(VirtualKey As Long, [UseKeyboardState As Boolean = True], pVal As Object) As Hresult
Function SaveLayout(Layout As Object) As Hresult
Function LoadLayout(Layout As String) As Hresult
Get Color(Color As Object) As Hresult
Get EnableVistaFileDialog(pVal As Object) As Hresult
Let EnableVistaFileDialog(pVal As Boolean) As Hresult
Function LoadIcon(FileName As String, Result As Object) As Hresult
Function LoadSysIcon(ID As Long, Result As Object) As Hresult
Function GetIconCount(FileName As String, Result As Object) As Hresult


« Last Edit: April 26, 2020, 03:51:43 PM by John »

John

  • Hero Member
  • *****
  • Posts: 3779
Re: DLLC status
« Reply #10 on: April 26, 2020, 05:49:48 PM »
It seems there is a standard DLL export function in the COM extension module that might work. I need to create a standard C callback function and be able to get its function address. In that function it can call the SBCallBack function in the COM extension that would already be loaded.

Code: Visual Basic
  1. 'this is the simple callback it takes one long arg and returns a long
  2. Private Declare Function ext_SBCallBack Lib "COM.dll" Alias "SBCallBack" (ByVal EntryPoint As Long, ByVal arg As Long) As Long
  3.  

The C code function for SBCallBack.

Code: C
  1. int __stdcall SBCallBack(int EntryPoint)
  2. {
  3. #pragma EXPORT
  4.  
  5.   pSupportTable pSt = g_pSt;
  6.   VARIABLE FunctionResult;
  7.   int retVal;
  8.  
  9.   if(pSt==NULL) return -1;
  10.   besHOOK_CALLSCRIBAFUNCTION(EntryPoint, 0, 0, &FunctionResult);
  11.   retVal = FunctionResult->Value.lValue;
  12.   besRELEASE(FunctionResult);
  13.   return retVal;
  14. }
  15.  

Update - I'm unable to call the SBCallBack function becuase the DLL it resides in is in SB format. Not as EXPORTable as I had hoped.

The function is called from VB which works as SB loaded the COM extension module. It makes me wonder if DLLC could provide a smart callback function and provide a function address WSO could use.

What besHOOK_CALLSCRIBAFUNCTION provides is a callback to a SB FUNCTION/SUB in the main thread. WSO is like having a dynamic VB you interface with using COM/OLE automation.

I've attached the IDL file for WSO.
« Last Edit: April 27, 2020, 07:04:26 AM by John »

John

  • Hero Member
  • *****
  • Posts: 3779
Re: DLLC status
« Reply #11 on: April 28, 2020, 07:15:03 AM »
If DLLC isn't a good fit to create a dynamic callback function(s), I may create a C extension module with the only functionality being establishing standard callback WSO functions, assigning a SB callback and returning a function pointer to be use by WSO for events.

John

  • Hero Member
  • *****
  • Posts: 3779
Re: DLLC status
« Reply #12 on: May 05, 2020, 01:10:36 PM »
Even VBA has a CallByName() API like ScriptBasic's COM extension.

CallByName in VBA

John

  • Hero Member
  • *****
  • Posts: 3779
Re: DLLC status
« Reply #13 on: May 07, 2020, 10:52:13 PM »
Charles,

I was testing the DLLcFreeImage1.sb example for DLLC and it fails trying to load the FreeImage.dll.

fih=dllc_file("FreeImage.dll") 

The DLL is in the same directory as the script. I tried a full path but no luck.

I download the latest release of the DLL before testing on my Widows 10 laptop.

Can you give it a try on your end?

John

  • Hero Member
  • *****
  • Posts: 3779
Re: DLLC status
« Reply #14 on: May 08, 2020, 09:41:48 AM »
My bad. I didn't have Oxygen.dll in the working ScriptBASIC directory.


At least I got by the load error.

I dies on this line.

print dllc_call(Version) & "\n"

I wonder if the new freeimage.dll doesn't use mangled function names and that is the issue?

It seems the DLLC Tests directory of scripts work. Not sure what is the problem is with freeimage.

Update

It seems the DLL function names are okay. It's when I try to call  them does the script return to a command promt.

Fails on this line.

print dllc_call(Version) & "\n"

Here is the dumpbin/EXPORTS for FreeImage.dll (32 bit)


C:\ScriptBASIC\bin>dumpbin /EXPORTS FreeImage.dll
Microsoft (R) COFF Binary File Dumper Version 6.00.8168
Copyright (C) Microsoft Corp 1992-1998. All rights reserved.


Dump of file FreeImage.dll

File Type: DLL

  Section contains the following exports for FreeImage.dll

           0 characteristics
    FFFFFFFF time date stamp
        0.00 version
           1 ordinal base
         255 number of functions
         255 number of names

    ordinal hint RVA      name

        194    0 00007480 FreeImage_OutputMessageProc
          1    1 00008520 _FreeImage_AcquireMemory@12
          2    2 00072410 _FreeImage_AdjustBrightness@12
          3    3 00072BD0 _FreeImage_AdjustColors@32
          4    4 000724F0 _FreeImage_AdjustContrast@12
          5    5 00071E70 _FreeImage_AdjustCurve@12
          6    6 00072300 _FreeImage_AdjustGamma@12
          7    7 00001B90 _FreeImage_Allocate@24
          8    8 00069800 _FreeImage_AllocateEx@36
          9    9 000692C0 _FreeImage_AllocateExT@40
         10    A 00001B60 _FreeImage_AllocateHeader@28
         11    B 00001AE0 _FreeImage_AllocateHeaderForBits@36
         12    C 00001B20 _FreeImage_AllocateHeaderT@32
         13    D 00001BC0 _FreeImage_AllocateT@28
         14    E 0005A4A0 _FreeImage_AppendPage@8
         15    F 00072C80 _FreeImage_ApplyColorMapping@24
         16   10 00073300 _FreeImage_ApplyPaletteIndexMapping@20
         17   11 00001E20 _FreeImage_Clone@4
         18   12 000034B0 _FreeImage_CloneMetadata@8
         19   13 00061FA0 _FreeImage_CloneTag@4
         20   14 00008410 _FreeImage_CloseMemory@4
         21   15 00059EB0 _FreeImage_CloseMultiBitmap@8
         22   16 0003FC80 _FreeImage_ColorQuantize@8
         23   17 0003FCA0 _FreeImage_ColorQuantizeEx@20
         24   18 00075920 _FreeImage_Composite@16
         25   19 000400D0 _FreeImage_ConvertFromRawBits@36
         26   1A 0003FFC0 _FreeImage_ConvertFromRawBitsEx@44
         27   1B 000426B0 _FreeImage_ConvertLine16To24_555@12
         28   1C 00042760 _FreeImage_ConvertLine16To24_565@12
         29   1D 000433A0 _FreeImage_ConvertLine16To32_555@12
         30   1E 00043450 _FreeImage_ConvertLine16To32_565@12
         31   1F 00044430 _FreeImage_ConvertLine16To4_555@12
         32   20 00044520 _FreeImage_ConvertLine16To4_565@12
         33   21 00044E60 _FreeImage_ConvertLine16To8_555@12
         34   22 00044F20 _FreeImage_ConvertLine16To8_565@12
         35   23 00041AD0 _FreeImage_ConvertLine16_555_To16_565@12
         36   24 00040EA0 _FreeImage_ConvertLine16_565_To16_555@12
         37   25 00040D10 _FreeImage_ConvertLine1To16_555@16
         38   26 00041940 _FreeImage_ConvertLine1To16_565@16
         39   27 00042560 _FreeImage_ConvertLine1To24@16
         40   28 00043230 _FreeImage_ConvertLine1To32@16
         41   29 00043540 _FreeImage_ConvertLine1To32MapTransparency@24
         42   2A 00044310 _FreeImage_ConvertLine1To4@12
         43   2B 00044DD0 _FreeImage_ConvertLine1To8@12
         44   2C 000412C0 _FreeImage_ConvertLine24To16_555@12
         45   2D 00041EE0 _FreeImage_ConvertLine24To16_565@12
         46   2E 00043500 _FreeImage_ConvertLine24To32@12
         47   2F 00044610 _FreeImage_ConvertLine24To4@12
         48   30 00044FF0 _FreeImage_ConvertLine24To8@12
         49   31 00041320 _FreeImage_ConvertLine32To16_555@12
         50   32 00041F40 _FreeImage_ConvertLine32To16_565@12
         51   33 00042800 _FreeImage_ConvertLine32To24@12
         52   34 000446C0 _FreeImage_ConvertLine32To4@12
         53   35 00045080 _FreeImage_ConvertLine32To8@12
         54   36 00040DB0 _FreeImage_ConvertLine4To16_555@16
         55   37 000419E0 _FreeImage_ConvertLine4To16_565@16
         56   38 000425D0 _FreeImage_ConvertLine4To24@16
         57   39 000432C0 _FreeImage_ConvertLine4To32@16
         58   3A 000435D0 _FreeImage_ConvertLine4To32MapTransparency@24
         59   3B 00044E10 _FreeImage_ConvertLine4To8@12
         60   3C 00040E30 _FreeImage_ConvertLine8To16_555@16
         61   3D 00041A60 _FreeImage_ConvertLine8To16_565@16
         62   3E 00042650 _FreeImage_ConvertLine8To24@16
         63   3F 00043340 _FreeImage_ConvertLine8To32@16
         64   40 00043690 _FreeImage_ConvertLine8To32MapTransparency@24
         65   41 00044380 _FreeImage_ConvertLine8To4@16
         66   42 00041380 _FreeImage_ConvertTo16Bits555@4
         67   43 00041FA0 _FreeImage_ConvertTo16Bits565@4
         68   44 00042850 _FreeImage_ConvertTo24Bits@4
         69   45 00043710 _FreeImage_ConvertTo32Bits@4
         70   46 00044770 _FreeImage_ConvertTo4Bits@4
         71   47 00045110 _FreeImage_ConvertTo8Bits@4
         72   48 00045D50 _FreeImage_ConvertToFloat@4
         73   49 00045800 _FreeImage_ConvertToGreyscale@4
         74   4A 00046610 _FreeImage_ConvertToRGB16@4
         75   4B 000067C0 _FreeImage_ConvertToRGBA16@4
         76   4C 00006C40 _FreeImage_ConvertToRGBAF@4
         77   4D 00046A70 _FreeImage_ConvertToRGBF@4
         78   4E 00040100 _FreeImage_ConvertToRawBits@32
         79   4F 00047230 _FreeImage_ConvertToStandardType@8
         80   50 00047340 _FreeImage_ConvertToType@12
         81   51 0004E7C0 _FreeImage_ConvertToUINT16@4
         82   52 00074D70 _FreeImage_Copy@20
         83   53 00002EE0 _FreeImage_CreateICCProfile@12
         84   54 00061F20 _FreeImage_CreateTag@0
         85   55 00075660 _FreeImage_CreateView@20
         86   56 0000D550 _FreeImage_DeInitialise@0
         87   57 0005A600 _FreeImage_DeletePage@8
         88   58 00061F60 _FreeImage_DeleteTag@4
         89   59 00002F70 _FreeImage_DestroyICCProfile@4
         90   5A 00050150 _FreeImage_Dither@8
         91   5B 00069830 _FreeImage_EnlargeCanvas@28
         92   5C 0000DE60 _FreeImage_FIFSupportsExportBPP@8
         93   5D 0000DE90 _FreeImage_FIFSupportsExportType@8
         94   5E 0000DEC0 _FreeImage_FIFSupportsICCProfiles@4
         95   5F 0000DEF0 _FreeImage_FIFSupportsNoPixels@4
         96   60 0000DE00 _FreeImage_FIFSupportsReading@4
         97   61 0000DE30 _FreeImage_FIFSupportsWriting@4
         98   62 00069170 _FreeImage_FillBackground@12
         99   63 00003480 _FreeImage_FindCloseMetadata@4
        100   64 00003300 _FreeImage_FindFirstMetadata@12
        101   65 00003400 _FreeImage_FindNextMetadata@8
        102   66 00076030 _FreeImage_FlipHorizontal@4
        103   67 00076390 _FreeImage_FlipVertical@4
        104   68 000728C0 _FreeImage_GetAdjustColorsLookupTable@32
        105   69 00003020 _FreeImage_GetBPP@4
        106   6A 00002B40 _FreeImage_GetBackgroundColor@8
        107   6B 000024B0 _FreeImage_GetBits@4
        108   6C 00002A80 _FreeImage_GetBlueMask@4
        109   6D 0006B9D0 _FreeImage_GetChannel@8
        110   6E 000025B0 _FreeImage_GetColorType@4
        111   6F 00003100 _FreeImage_GetColorsUsed@4
        112   70 0006C840 _FreeImage_GetComplexChannel@8
        113   71 00007440 _FreeImage_GetCopyrightMessage@0
        114   72 00003130 _FreeImage_GetDIBSize@4
        115   73 000031E0 _FreeImage_GetDotsPerMeterX@4
        116   74 00003210 _FreeImage_GetDotsPerMeterY@4
        117   75 0000DAF0 _FreeImage_GetFIFCount@0
        118   76 0000DD80 _FreeImage_GetFIFDescription@4
        119   77 0000DD40 _FreeImage_GetFIFExtensionList@4
        120   78 0000DF20 _FreeImage_GetFIFFromFilename@4
        121   79 0000E1C0 _FreeImage_GetFIFFromFilenameU@4
        122   7A 0000DB00 _FreeImage_GetFIFFromFormat@4
        123   7B 0000DBF0 _FreeImage_GetFIFFromMime@4
        124   7C 0000DD10 _FreeImage_GetFIFMimeType@4
        125   7D 0000DDC0 _FreeImage_GetFIFRegExpr@4
        126   7E 00007A10 _FreeImage_GetFileType@8
        127   7F 000079A0 _FreeImage_GetFileTypeFromHandle@12
        128   80 00007AF0 _FreeImage_GetFileTypeFromMemory@8
        129   81 00007A80 _FreeImage_GetFileTypeU@8
        130   82 0000DCE0 _FreeImage_GetFormatFromFIF@4
        131   83 000029E0 _FreeImage_GetGreenMask@4
        132   84 00002FF0 _FreeImage_GetHeight@4
        133   85 000725D0 _FreeImage_GetHistogram@12
        134   86 00002EC0 _FreeImage_GetICCProfile@4
        135   87 000028C0 _FreeImage_GetImageType@4
        136   88 000032D0 _FreeImage_GetInfo@4
        137   89 000032A0 _FreeImage_GetInfoHeader@4
        138   8A 00003050 _FreeImage_GetLine@4
        139   8B 0005AA20 _FreeImage_GetLockedPageNumbers@12
        140   8C 00003EC0 _FreeImage_GetMemorySize@4
        141   8D 00003C90 _FreeImage_GetMetadata@16
        142   8E 00003E10 _FreeImage_GetMetadataCount@8
        143   8F 0005A350 _FreeImage_GetPageCount@4
        144   90 00003190 _FreeImage_GetPalette@4
        145   91 000030A0 _FreeImage_GetPitch@4
        146   92 00008740 _FreeImage_GetPixelColor@16
        147   93 00008630 _FreeImage_GetPixelIndex@16
        148   94 00002940 _FreeImage_GetRedMask@4
        149   95 000085F0 _FreeImage_GetScanLine@8
        150   96 00062260 _FreeImage_GetTagCount@4
        151   97 00062200 _FreeImage_GetTagDescription@4
        152   98 00062220 _FreeImage_GetTagID@4
        153   99 000621E0 _FreeImage_GetTagKey@4
        154   9A 00062280 _FreeImage_GetTagLength@4
        155   9B 00062240 _FreeImage_GetTagType@4
        156   9C 000622A0 _FreeImage_GetTagValue@4
        157   9D 00002520 _FreeImage_GetThumbnail@4
        158   9E 00002D60 _FreeImage_GetTransparencyCount@4
        159   9F 00002CF0 _FreeImage_GetTransparencyTable@4
        160   A0 00002E80 _FreeImage_GetTransparentIndex@4
        161   A1 00007420 _FreeImage_GetVersion@0
        162   A2 00002FC0 _FreeImage_GetWidth@4
        163   A3 00002B20 _FreeImage_HasBackgroundColor@4
        164   A4 000028E0 _FreeImage_HasPixels@4
        165   A5 00002900 _FreeImage_HasRGBMasks@4
        166   A6 0000D010 _FreeImage_Initialise@4
        167   A7 0005A530 _FreeImage_InsertPage@12
        168   A8 00071A90 _FreeImage_Invert@4
        169   A9 00007450 _FreeImage_IsLittleEndian@0
        170   AA 0000DAC0 _FreeImage_IsPluginEnabled@4
        171   AB 00002C70 _FreeImage_IsTransparent@4
        172   AC 00076E80 _FreeImage_JPEGCrop@24
        173   AD 00076FA0 _FreeImage_JPEGCropU@24
        174   AE 00076DF0 _FreeImage_JPEGTransform@16
        175   AF 00077030 _FreeImage_JPEGTransformCombined@32
        176   B0 00077150 _FreeImage_JPEGTransformCombinedFromMemory@32
        177   B1 000770C0 _FreeImage_JPEGTransformCombinedU@32
        178   B2 00076B10 _FreeImage_JPEGTransformFromHandle@40
        179   B3 00076F10 _FreeImage_JPEGTransformU@16
        180   B4 0000D710 _FreeImage_Load@12
        181   B5 0000D680 _FreeImage_LoadFromHandle@16
        182   B6 00008450 _FreeImage_LoadFromMemory@12
        183   B7 0005AAE0 _FreeImage_LoadMultiBitmapFromMemory@12
        184   B8 0000D7A0 _FreeImage_LoadU@12
        185   B9 0005A680 _FreeImage_LockPage@8
        186   BA 000066D0 _FreeImage_LookupSVGColor@16
        187   BB 000065E0 _FreeImage_LookupX11Color@16
        188   BC 00079C70 _FreeImage_MakeThumbnail@12
        189   BD 0005A970 _FreeImage_MovePage@12
        190   BE 000791C0 _FreeImage_MultigridPoissonSolver@8
        191   BF 000083A0 _FreeImage_OpenMemory@8
        192   C0 00059770 _FreeImage_OpenMultiBitmap@24
        193   C1 00059AC0 _FreeImage_OpenMultiBitmapFromHandle@16
        195   C2 000752B0 _FreeImage_Paste@20
        196   C3 00075EF0 _FreeImage_PreMultiplyWithAlpha@4
        197   C4 000085A0 _FreeImage_ReadMemory@16
        198   C5 0000DA20 _FreeImage_RegisterExternalPlugin@20
        199   C6 0000DA00 _FreeImage_RegisterLocalPlugin@20
        200   C7 00079C10 _FreeImage_Rescale@16
        201   C8 00079970 _FreeImage_RescaleRect@36
        202   C9 0006E6D0 _FreeImage_Rotate@16
        203   CA 0006B3D0 _FreeImage_RotateEx@48
        204   CB 0000D8E0 _FreeImage_Save@16
        205   CC 00059BF0 _FreeImage_SaveMultiBitmapToHandle@20
        206   CD 0005ABE0 _FreeImage_SaveMultiBitmapToMemory@16
        207   CE 0000D820 _FreeImage_SaveToHandle@20
        208   CF 000084B0 _FreeImage_SaveToMemory@16
        209   D0 0000D970 _FreeImage_SaveU@16
        210   D1 00008550 _FreeImage_SeekMemory@12
        211   D2 00002C30 _FreeImage_SetBackgroundColor@8
        212   D3 0006C390 _FreeImage_SetChannel@12
        213   D4 0006CD70 _FreeImage_SetComplexChannel@12
        214   D5 00003240 _FreeImage_SetDotsPerMeterX@8
        215   D6 00003270 _FreeImage_SetDotsPerMeterY@8
        216   D7 00003830 _FreeImage_SetMetadata@16
        217   D8 00003D70 _FreeImage_SetMetadataKeyValue@16
        218   D9 00007460 _FreeImage_SetOutputMessage@4
        219   DA 00007470 _FreeImage_SetOutputMessageStdCall@4
        220   DB 00008A80 _FreeImage_SetPixelColor@16
        221   DC 00008950 _FreeImage_SetPixelIndex@16
        222   DD 0000DA90 _FreeImage_SetPluginEnabled@8
        223   DE 000623D0 _FreeImage_SetTagCount@8
        224   DF 00062320 _FreeImage_SetTagDescription@8
        225   E0 00062390 _FreeImage_SetTagID@8
        226   E1 000622C0 _FreeImage_SetTagKey@8
        227   E2 000623F0 _FreeImage_SetTagLength@8
        228   E3 000623B0 _FreeImage_SetTagType@8
        229   E4 00062410 _FreeImage_SetTagValue@8
        230   E5 00002540 _FreeImage_SetThumbnail@8
        231   E6 00002D80 _FreeImage_SetTransparencyTable@12
        232   E7 00002D10 _FreeImage_SetTransparent@8
        233   E8 00002E10 _FreeImage_SetTransparentIndex@8
        234   E9 000732E0 _FreeImage_SwapColors@16
        235   EA 00073600 _FreeImage_SwapPaletteIndices@12
        236   EB 00066770 _FreeImage_TagToString@12
        237   EC 00008580 _FreeImage_TellMemory@4
        238   ED 00050370 _FreeImage_Threshold@8
        239   EE 00051B40 _FreeImage_TmoDrago03@20
        240   EF 00054590 _FreeImage_TmoFattal02@20
        241   F0 00055190 _FreeImage_TmoReinhard05@20
        242   F1 000550E0 _FreeImage_TmoReinhard05Ex@36
        243   F2 000551E0 _FreeImage_ToneMapping@24
        244   F3 00001BF0 _FreeImage_Unload@4
        245   F4 0005A7E0 _FreeImage_UnlockPage@12
        246   F5 00007B60 _FreeImage_Validate@8
        247   F6 00007B40 _FreeImage_ValidateFromHandle@12
        248   F7 00007C40 _FreeImage_ValidateFromMemory@8
        249   F8 00007BD0 _FreeImage_ValidateU@8
        250   F9 000085C0 _FreeImage_WriteMemory@16
        251   FA 0005BD50 _FreeImage_ZLibCRC32@12
        252   FB 0005B980 _FreeImage_ZLibCompress@16
        253   FC 0005BC80 _FreeImage_ZLibGUnzip@16
        254   FD 0005BA40 _FreeImage_ZLibGZip@16
        255   FE 0005B9E0 _FreeImage_ZLibUncompress@16

  Summary

      190000 .data
      16F000 .rdata
       17000 .reloc
        1000 .rsrc
      2AB000 .text
        1000 _RDATA

C:\ScriptBASIC\bin>
« Last Edit: May 08, 2020, 03:25:15 PM by John »