none
[GELÖST] DLL für 32 oder 64 Bit laden bei "AnyCPU"-Einstellung RRS feed

  • Frage

  • 
    
    
    
    
    

    Wie kann ich bei einer Anwendung (C#) die mit der Einstellung "AnyCPU" kompiliert wird, zwischen 64 und 32 Bit unterscheiden. um entsprechend der Architektur eine DLL verwenden zu können.

    In einem anderen (MSDN-Foren) Post "Plattform-Unterscheidung für DLL-Einbindung über DllImport" (leider kann ich keine Links posten) wird vorgeschlagen die DLLs identisch zu benennen und anhand vom Verzeichnis zu unterscheiden, nur wie soll das bei einem const string gehen?

    public class MeineKlasse
    {
    	#if x64
    			public const string Path = "";
    			public const string Filename = "mydll64.dll";    
    	#else  
    			public const string Path = "";
    			public const string Filename = "mydll.dll";
    	#endif 
    	
    			protected const string DllName = Path + Filename;
    	
    			[DllImport(DllName]
    			protected static extern void DLLFunktion();
    }

    Gruß,

    Crazy

    
    

    EDIT:

    Ja der Wald und die vielen Bäume ....

    ich habe das Problem nun so gelöst:

    public class MeineKlasse
    {
    
    			public const string Path32 = "";
    			public const string Filename32 = "mydll64.dll";    
    
    			public const string Path64 = "";
    			public const string Filename64 = "mydll.dll";
    
    			public static string Path
    			{
    				get { return IntPtr.Size == 8 /* 64bit */ ? Path64 : Path32;}
    				set{;}
    			}
    			
    			public static string Filename
    			{
    				get { return IntPtr.Size == 8 /* 64bit */ ? Filename64 : Filename32;}
    				set{;}
    			}
    			
    			protected const string DllName32 = Path32 + Filename32;
    			protected const string DllName64 = Path64 + Filename64;
    	
    	
    			[DllImport(DllName]
    			protected static extern int DLLFunktion32();
    			
    			[DllImport(DllName]
    			protected static extern int DLLFunktion64();
    			
    			protected static int DLLFunktion()
    			{
    				return IntPtr.Size == 8 /* 64bit */ ? DLLFunktion64() : DLLFunktion32();
    			}
    }


    • Bearbeitet CrazyMetal Mittwoch, 10. September 2014 08:19 Lösung gefunden
    Mittwoch, 10. September 2014 07:18

Alle Antworten