How to check if .net interoperability for excel is installed

后端 未结 3 1228
傲寒
傲寒 2021-01-27 23:48

I am using .net Primary Interoperability Assembly for Excel in my code. But, the application can be run on machine which doesn\'t have .net PIA for Excel installed. I want to gi

3条回答
  •  故里飘歌
    2021-01-28 00:09

    I've used this Building block to load the x86 / x64 versions of hunspell in may NHunspell wrapper. maybe it is a good starting point for your own dynamic loader:

                // Initialze the dynamic marshall Infrastructure to call the 32Bit (x86) or the 64Bit (x64) Dll respectively 
                SYSTEM_INFO info = new SYSTEM_INFO();
                GetSystemInfo( ref info );
    
                // Load the correct DLL according to the processor architecture
                switch( info.wProcessorArchitecture )
                {
                    case PROCESSOR_ARCHITECTURE.Intel:
                        string pathx86 = AppDomain.CurrentDomain.BaseDirectory;
                        if (!pathx86.EndsWith("\\"))
                            pathx86 += "\\";
                        pathx86 +=  Resources.HunspellX86DllName;
    
                        dllHandle = LoadLibrary(pathx86);
                        if (dllHandle == IntPtr.Zero)
                            throw new DllNotFoundException(string.Format(Resources.HunspellX86DllNotFoundMessage, pathx86));
                        break;
    
                    case PROCESSOR_ARCHITECTURE.Amd64:
                        string pathx64 = AppDomain.CurrentDomain.BaseDirectory;
                        if (!pathx64.EndsWith("\\"))
                            pathx64 += "\\";
                        pathx64 += Resources.HunspellX64DllName;
    
                        dllHandle = LoadLibrary(pathx64);
                        if (dllHandle == IntPtr.Zero)
                            throw new DllNotFoundException(string.Format(Resources.HunspellX64DllNotFoundMessage, pathx64));
                        break;
    

    look at this delegate declarations:

    internal delegate bool HunspellSpellDelegate(IntPtr handle, [MarshalAs(UnmanagedType.LPWStr)] string word);
    

    And how to bind a library function to it

    HunspellSpell = (HunspellSpellDelegate)GetDelegate("HunspellSpell", typeof(HunspellSpellDelegate));
    

    I think this should work for you too, but you have to declare the complete interop code. You can check out the Nhunspell code to get a working sample of this technique:

    NHunspell Web Site

提交回复
热议问题