• Login
Community
  • Login

SQLinForm dll not compatible with the current version o N++

Scheduled Pinned Locked Moved Notepad++ & Plugin Development
28 Posts 5 Posters 3.3k Views
Loading More Posts
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • G
    Guido Thelen @PeterJones
    last edited by Jan 9, 2021, 10:09 PM

    @PeterJones I removed some of my changes. It is still not starting but I am getting a more clear error message.
    “This ANSI plugin is not compatible with your Unicode Notepad++”
    It looks like I am missing the point where I turn my Plugin into an UTF-8 plugin.

    Any idea where I can find this switch?

    2bdc7cd2-9496-4601-9d27-d57bf941d6c9-grafik.png

    Regards
    Guido

    G E 2 Replies Last reply Jan 9, 2021, 10:27 PM Reply Quote 1
    • G
      Guido Thelen @Guido Thelen
      last edited by Jan 9, 2021, 10:27 PM

      and this is the content from UnmanagedExports

      // NPP plugin platform for .Net v0.93.87 by Kasper B. Graversen etc.
      using Kbg.NppPluginNET.PluginInfrastructure;
      using NppPlugin.DllExport;
      using System;
      using System.Runtime.InteropServices;
      
      namespace Kbg.NppPluginNET
      {
          internal class UnmanagedExports
          {
              [DllExport(CallingConvention = CallingConvention.Cdecl)]
              private static bool isUnicode()
              {
                  return true;
              }
      
              [DllExport(CallingConvention = CallingConvention.Cdecl)]
              private static void setInfo(NppData notepadPlusData)
              {
                  PluginBase.nppData = notepadPlusData;
                  Main.CommandMenuInit();
              }
      
              [DllExport(CallingConvention = CallingConvention.Cdecl)]
              private static IntPtr getFuncsArray(ref int nbF)
              {
                  nbF = PluginBase._funcItems.Items.Count;
                  return PluginBase._funcItems.NativePointer;
              }
      
              [DllExport(CallingConvention = CallingConvention.Cdecl)]
              private static uint messageProc(uint Message, IntPtr wParam, IntPtr lParam)
              {
                  return 1;
              }
      
              private static IntPtr _ptrPluginName = IntPtr.Zero;
      
              [DllExport(CallingConvention = CallingConvention.Cdecl)]
              private static IntPtr getName()
              {
                  if (_ptrPluginName == IntPtr.Zero)
                      _ptrPluginName = Marshal.StringToHGlobalUni(Main.PluginName);
                  return _ptrPluginName;
              }
      
              [DllExport(CallingConvention = CallingConvention.Cdecl)]
              private static void beNotified(IntPtr notifyCode)
              {
                  ScNotification notification = (ScNotification)Marshal.PtrToStructure(notifyCode, typeof(ScNotification));
                  if (notification.Header.Code == (uint)NppMsg.NPPN_TBMODIFICATION)
                  {
                      PluginBase._funcItems.RefreshItems();
                      Main.SetToolBarIcon();
                  }
                  else if (notification.Header.Code == (uint)NppMsg.NPPN_SHUTDOWN)
                  {
                      Main.PluginCleanUp();
                      Marshal.FreeHGlobal(_ptrPluginName);
                  }
                  else
                  {
                      Main.OnNotification(notification);
                  }
              }
          }
      }
      
      1 Reply Last reply Reply Quote 0
      • E
        Ekopalypse @Guido Thelen
        last edited by Jan 9, 2021, 10:27 PM

        @Guido-Thelen

        this error happens when isUnicode function is not exported.
        isUnicode should always return True.

        G 1 Reply Last reply Jan 9, 2021, 10:28 PM Reply Quote 2
        • G
          Guido Thelen @Ekopalypse
          last edited by Guido Thelen Jan 9, 2021, 10:28 PM Jan 9, 2021, 10:28 PM

          @Ekopalypse ok. I checked the UnmanagedExports class and it contains isUnicode function (see code snippet above)

          1 Reply Last reply Reply Quote 0
          • E
            Ekopalypse
            last edited by Jan 9, 2021, 10:29 PM

            but is it really exported??
            Tools like dumpbin /exports can show if the function is really exported.

            1 Reply Last reply Reply Quote 1
            • E
              Ekopalypse
              last edited by Ekopalypse Jan 9, 2021, 10:32 PM Jan 9, 2021, 10:31 PM

              Something like this

              dumpbin /exports D:\PortableApps\Npp\plugins\PythonScript\PythonScript.dll
              
              Dump of file D:\PortableApps\Npp\plugins\PythonScript\PythonScript.dll
              
              File Type: DLL
              
                Section contains the following exports for PythonScript.dll
              
                  00000000 characteristics
                  FFFFFFFF time date stamp
                      0.00 version
                         1 ordinal base
                         7 number of functions
                         7 number of names
              
                  ordinal hint RVA      name
              
                        1    0 000452B0 PyInit_Npp
                        2    1 000434E0 beNotified
                        3    2 00042730 getFuncsArray
                        4    3 00042720 getName
                        5    4 0000A420 isUnicode
                        6    5 00043880 messageProc
                        7    6 00042570 setInfo
              
                Summary
              
                     16000 .data
                      D000 .pdata
                     6B000 .rdata
                      2000 .reloc
                      9000 .rsrc
                     F7000 .text
              
              1 Reply Last reply Reply Quote 2
              • G
                Guido Thelen
                last edited by Jan 9, 2021, 10:37 PM

                indeed. this could be the problem. When I build the same solution with VS2015 instead of VS2019, it works (without changing anything). Probably the Export is not done in VS2019.

                E 1 Reply Last reply Jan 9, 2021, 10:39 PM Reply Quote 2
                • E
                  Ekopalypse @Guido Thelen
                  last edited by Ekopalypse Jan 9, 2021, 10:39 PM Jan 9, 2021, 10:39 PM

                  @Guido-Thelen
                  last time I played with C# plugin interface there was an
                  extra export step at the end. I can’t remember its name.
                  Maybe in 2019 it does have to be called slightly different!?

                  G 1 Reply Last reply Jan 9, 2021, 10:40 PM Reply Quote 1
                  • G
                    Guido Thelen @Ekopalypse
                    last edited by Jan 9, 2021, 10:40 PM

                    @Ekopalypse thx. Will check this. Where can I find dumpbin?

                    1 Reply Last reply Reply Quote 1
                    • E
                      Ekopalypse
                      last edited by Ekopalypse Jan 9, 2021, 10:41 PM Jan 9, 2021, 10:40 PM

                      should be available from a developer command prompt
                      Is part of VS environment.

                      G 1 Reply Last reply Jan 9, 2021, 10:46 PM Reply Quote 2
                      • G
                        Guido Thelen @Ekopalypse
                        last edited by Guido Thelen Jan 9, 2021, 10:47 PM Jan 9, 2021, 10:46 PM

                        @Ekopalypse ok. found it. it is strange. the version built with VS2015 does not have the isUniCode function exported, but it works

                        Dump of file C:\Users\guido\Documents\SQL\C#SQLinForm\SQLinFormNpp - Kopie (3)\SQLinFormNpp\bin\Release\SQLinFormNpp.dll
                        
                        File Type: DLL
                        
                          Summary
                        
                                2000 .reloc
                                2000 .rsrc
                                2000 .sdata
                               F6000 .text
                        
                        C:\Program Files (x86)\Microsoft Visual Studio\2019\Community>
                        
                        
                        

                        So, it looks like it is as you wrote: the export is missing

                        E Z 2 Replies Last reply Jan 9, 2021, 10:52 PM Reply Quote 1
                        • E
                          Ekopalypse
                          last edited by Jan 9, 2021, 10:48 PM

                          that is strange, indeed. How can npp access non-existent function pointers??
                          Let me check this again.

                          1 Reply Last reply Reply Quote 0
                          • E
                            Ekopalypse @Guido Thelen
                            last edited by Jan 9, 2021, 10:52 PM

                            @Guido-Thelen If I download the version available from plugin admin I do see the functions exported.

                            File Type: DLL
                            
                              Section contains the following exports for \SQLinFormNpp64.dll
                            
                                00000000 characteristics
                                5DD1422F time date stamp Sun Nov 17 13:50:55 2019
                                    0.00 version
                                       0 ordinal base
                                       6 number of functions
                                       6 number of names
                            
                                ordinal hint RVA      name
                            
                                      5    0 000EF2CE beNotified
                                      2    1 000EF2AA getFuncsArray
                                      4    2 000EF2C2 getName
                                      0    3 000EF292 isUnicode
                                      3    4 000EF2B6 messageProc
                                      1    5 000EF29E setInfo
                            
                            G 1 Reply Last reply Jan 9, 2021, 10:54 PM Reply Quote 1
                            • G
                              Guido Thelen @Ekopalypse
                              last edited by Jan 9, 2021, 10:54 PM

                              @Ekopalypse I think I need a break. making too many errors. Thx for today.

                              E 1 Reply Last reply Jan 9, 2021, 10:54 PM Reply Quote 3
                              • E
                                Ekopalypse @Guido Thelen
                                last edited by Jan 9, 2021, 10:54 PM

                                @Guido-Thelen

                                no problem :-D - Good night.

                                G 1 Reply Last reply Jan 10, 2021, 12:06 PM Reply Quote 1
                                • Z
                                  zanud @Guido Thelen
                                  last edited by Jan 10, 2021, 12:32 AM

                                  @Guido-Thelen

                                  the version built with VS2015 does not have the isUniCode function exported, but it works

                                  Just in case: have not you forgot about the “/exports” parameter of dumpbin?

                                  G 1 Reply Last reply Jan 10, 2021, 11:58 AM Reply Quote 0
                                  • G
                                    Guido Thelen @zanud
                                    last edited by Jan 10, 2021, 11:58 AM

                                    @zanud exactly. thanks a lot.

                                    1 Reply Last reply Reply Quote 0
                                    • G
                                      Guido Thelen @Ekopalypse
                                      last edited by Jan 10, 2021, 12:06 PM

                                      @Ekopalypse today I got it working :-) Sleeping was of great help.
                                      The issue was that in the refactored version I am working with 2 C# projects. One project for the GUI and one project for the formatter/parser.
                                      I refer from the GUI project to the parser project. Because I am only referring to it, the parser dll is not included into the GUI output and Notepad++ issues an error message. The reason is probably that the parser dll cannot be found.
                                      But when I copy the source files from the parser project into the GUI project it is better. The GUI dll is of course much bigger and, because it contains now also the parser and Notepad++ is happy.
                                      Probably this is an stupid error, but I am not a C# develpper and I am not familiar with Visual Studio. I developped the original parser in Java and transpose the code with a utility into C#.
                                      Many Thanks to you :-)

                                      E 1 Reply Last reply Jan 10, 2021, 12:47 PM Reply Quote 4
                                      • E
                                        Ekopalypse @Guido Thelen
                                        last edited by Ekopalypse Jan 10, 2021, 12:47 PM Jan 10, 2021, 12:47 PM

                                        @Guido-Thelen

                                        Sleeping was of great help.

                                        Yeah, has been the solution to many of my problems as well :-D
                                        I’m not a C# developer either, only know VisualBasic.Net a bit.
                                        But this reminds me of a problem I had playing with the c# plugin interface.
                                        If I remember correctly, the problem was that loading the
                                        .Net class didn’t happen at the time npp loaded the plugin.
                                        You had to hack the import chain to make it work.
                                        Not sure if this is still relevant with a current .Net version either.
                                        If I find the code project article (I suspect it was there), I’ll let you know.

                                        1 Reply Last reply Reply Quote 2
                                        • R
                                          rinku singh @Guido Thelen
                                          last edited by rinku singh Jan 11, 2021, 6:17 PM Jan 11, 2021, 6:14 PM

                                          @Guido-Thelen said in SQLinForm dll not compatible with the current version o N++:

                                          @Ekopalypse thanks for your answer.
                                          Below is a screenshot of the message.
                                          4a759f89-2f84-4778-82c7-35ed6d15bcfa-grafik.png
                                          Regards
                                          Guido

                                          i think you are at windows 10
                                          https://github.com/pnedev/nppgtags/pull/28
                                          could not get dll for test

                                          P 1 Reply Last reply Jan 11, 2021, 6:20 PM Reply Quote 0
                                          17 out of 28
                                          • First post
                                            17/28
                                            Last post
                                          The Community of users of the Notepad++ text editor.
                                          Powered by NodeBB | Contributors