Community
    • Login

    Python plugin works in NPP 7.7 but does work in NPP 7.8 upward

    Scheduled Pinned Locked Moved Notepad++ & Plugin Development
    24 Posts 2 Posters 1.8k 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.
    • EkopalypseE
      Ekopalypse @Stier Hahn
      last edited by Ekopalypse

      @Stier-Hahn

      How do you compile the dll? Using Visual Studio, gcc …? Which version?

      Are the exports really exported? Using dumpbin like dumpbin /exports YOUR_PLUGIN.dll will give you that information.

      Stier HahnS 1 Reply Last reply Reply Quote 0
      • EkopalypseE
        Ekopalypse
        last edited by

        @Stier-Hahn said in Python plugin works in NPP 7.7 but does work in NPP 7.8 upward:

        NPP 7.7 works fine.

        Does that mean, the same, recently compiled dll, works here but not with 7.9.X??

        Stier HahnS 1 Reply Last reply Reply Quote 0
        • Stier HahnS
          Stier Hahn @Ekopalypse
          last edited by

          @Ekopalypse thank you for your feedback.
          I’ve created a minimal binary that works with 7.7 and does not work with 7.8

          https://github.com/stier08/NppPyStandalone/releases/tag/NppPluginTemplate_minimal_boost-1_68_0_vs2019_toolset_v140_wp37_01

          Source code https://github.com/stier08/NppPyStandalone/tree/minimal_boost-1_68_0_vs2019_toolset_v140_wp37

          My setup is as follows

          boost-1_68_0
          vs2019
          toolset v140
          wp37 (Winpython32-3.7.7.1dot)

          Plugin does work with
          https://github.com/notepad-plus-plus/notepad-plus-plus/releases/download/v7.7.1/npp.7.7.1.bin.7z

          but does not work with

          https://github.com/notepad-plus-plus/notepad-plus-plus/releases/download/v7.8/npp.7.8.bin.7z

          1 Reply Last reply Reply Quote 0
          • Stier HahnS
            Stier Hahn @Ekopalypse
            last edited by Stier Hahn

            @Ekopalypse said in Python plugin works in NPP 7.7 but does work in NPP 7.8 upward:

            /exports

            see my previous post on build setup

            here is what I get with dumpin

            Microsoft ® COFF/PE Dumper Version 14.28.29336.0
            Copyright © Microsoft Corporation. All rights reserved.

            Dump of file NppPluginTemplate.dll

            File Type: DLL

            Section contains the following exports for NppPluginTemplate.dll

            00000000 characteristics
            6013057D time date stamp Thu Jan 28 19:42:05 2021
                0.00 version
                   1 ordinal base
                   6 number of functions
                   6 number of names
            
            ordinal hint RVA      name
            
                  1    0 000010E0 beNotified
                  2    1 000010C0 getFuncsArray
                  3    2 000010B0 getName
                  4    3 000010F0 isUnicode
                  5    4 000010F0 messageProc
                  6    5 00001040 setInfo
            

            Summary

                2000 .data
                1000 .gfids
                6000 .rdata
                1000 .reloc
                1000 .rsrc
                D000 .text
            
            1 Reply Last reply Reply Quote 0
            • EkopalypseE
              Ekopalypse
              last edited by

              Let me do some tests with your code and the mentioned npp versions.

              1 Reply Last reply Reply Quote 0
              • EkopalypseE
                Ekopalypse
                last edited by

                Works for me

                8b16aa0a-e0b6-4f72-ba92-e5895457c5aa-image.png

                Where is your python3.dll located in 7.8?
                Should be within your plugin directory.

                Stier HahnS 1 Reply Last reply Reply Quote 2
                • Stier HahnS
                  Stier Hahn @Ekopalypse
                  last edited by

                  @Ekopalypse i’ve bin using same setup. I.e. only plugin dll is located in plugin dir. And python dir in path.

                  EkopalypseE 1 Reply Last reply Reply Quote 2
                  • EkopalypseE
                    Ekopalypse @Stier Hahn
                    last edited by

                    @Stier-Hahn
                    and there is no other python3 dll (64bit) in the path before the 32bit one?

                    Stier HahnS 1 Reply Last reply Reply Quote 0
                    • Stier HahnS
                      Stier Hahn @Ekopalypse
                      last edited by Stier Hahn

                      @Ekopalypse will check tmr in more details.

                      I can tell for sure (99%) I do not have any 64 bit builds of python on my box.

                      Ps
                      I’m still wondering that it works for me in 7.7 but not in 7.8. Just for my understanding were there any changes that could cause such behavior? Changes in dll lookup order or something

                      1 Reply Last reply Reply Quote 0
                      • EkopalypseE
                        Ekopalypse
                        last edited by

                        Starting from 7.8 plugins are allowed to load their own dlls from within the plugin directory.

                        1 Reply Last reply Reply Quote 2
                        • EkopalypseE
                          Ekopalypse
                          last edited by

                          Ah - could it be that path is not evaluted anymore? I guess so.

                          Stier HahnS 1 Reply Last reply Reply Quote 1
                          • Stier HahnS
                            Stier Hahn @Ekopalypse
                            last edited by

                            @Ekopalypse could you please check if it works for you if python dll is located in path and not in plugin dir

                            EkopalypseE 2 Replies Last reply Reply Quote 0
                            • EkopalypseE
                              Ekopalypse @Stier Hahn
                              last edited by

                              @Stier-Hahn - currently trying

                              EkopalypseE 1 Reply Last reply Reply Quote 0
                              • EkopalypseE
                                Ekopalypse @Ekopalypse
                                last edited by Ekopalypse

                                @Stier-Hahn
                                Yes, it is not found but then I do get

                                6925989c-f96a-49a9-bc06-d9fe35ba80a0-image.png

                                1 Reply Last reply Reply Quote 1
                                • EkopalypseE
                                  Ekopalypse
                                  last edited by

                                  and next window is
                                  81824459-8282-4997-9a08-23912af2543b-image.png

                                  1 Reply Last reply Reply Quote 0
                                  • EkopalypseE
                                    Ekopalypse
                                    last edited by

                                    but npp 7.7 works.

                                    1 Reply Last reply Reply Quote 1
                                    • EkopalypseE
                                      Ekopalypse @Stier Hahn
                                      last edited by

                                      @Stier-Hahn

                                      I start to remember that I read some conversation about
                                      security concerns regarding sideloading dlls.

                                      Stier HahnS 1 Reply Last reply Reply Quote 1
                                      • Stier HahnS
                                        Stier Hahn @Ekopalypse
                                        last edited by

                                        @Ekopalypse so, I’ve tested my minimal plugin build in 7.8 with python37.dll inside plugin dir and it works.

                                        My question from the top of the thread has been solved.

                                        Thank you very much!

                                        ps

                                        I still need to check if my main plugin will be working…
                                        Struggling to upgrade third-party libs and other dependencies…

                                        1 Reply Last reply Reply Quote 2
                                        • EkopalypseE
                                          Ekopalypse
                                          last edited by

                                          If there is anything we can do to help let us know.

                                          Stier HahnS 1 Reply Last reply Reply Quote 0
                                          • Stier HahnS
                                            Stier Hahn @Ekopalypse
                                            last edited by Stier Hahn

                                            @Ekopalypse you are doing great job , thank you !

                                            ps
                                            I came across a next roadblock , that’s more a pywin32 issue.

                                            See https://github.com/mhammond/pywin32/issues/1658

                                            May be you would have a hint how to troubleshoot that. as that seems to be sort of related to dependency lookup process.

                                            In a nutshell I’ve NPP plugin linked against boost::python which loads at startup some initialization python code. And it’s was working fine under py 3.7 and npp 7.7.

                                            Finally ( with your help) I managed to upgrade npp from 7.7 to 7.9
                                            and partially from winpython 3.7 to winpython 3.8.

                                            My NPP python plugin is loaded at startup, but execution of initialsation python scripts fails to import win32api.
                                            Embedded python wrapper is working fine ( I guess ) as import os / import sys and other simple code is working inside my plugin.

                                            I’m using win py 3.8 and latest pywin32 ( 300)

                                            Stier HahnS 1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post
                                            The Community of users of the Notepad++ text editor.
                                            Powered by NodeBB | Contributors