| 
				 
					27.04.2010, 16:18  
				 
				
  Beitrag #1 
			 | 
		 
		
		
			
                                 
					
                                                 
				
                    
                     
                             
                       
                            Honeygirl24 
 
 
                            
                                LVF-Gelegenheitsschreiber 
                                   
                                
  
                            
                            
	Beiträge: 169 
	Registriert seit: Jan 2008
	
 
 
8.5 , 8,6 , 2009, 2010 
2007 
de 
 
90461 
Deutschland 
			 | 
                              
DLL als Wrapperfunktion 
				 
					Hallo, 
 
ich beschäftige mich derzeit mit folgendem Problem... 
Nachdem ich eine fertige DLL (in C geschrieben, C-Code unbekannt, aus Headerdateien Funktionen mit den Parametern sichtbar) in LabVIEW über die Funktion "Importieren" eingfügt habe, stellte ich fest, dass sich einige komplexe Funktionen 
in der DLL nicht konvertieren ließen... 
Bis jetzt habe ich rausgefunden, dass ich neben der DLL und den Headerdateien zusätzlich eine Wrapper-DLL schreiben muss. 
Vorallem geht es um z.B um diese Funktion 
 
.......... 
 
typedef struct __Object * testRef; 
 
typedef testRef var1Ref; 
typedef testRef var2Ref; 
 
unsigned int retain(Ref testRef); 
 
 
Mehr ist mir über über dieses Struct nicht bekannt... 
 
Wie schreibe ich hierzu die Wrapperfunktion, dass die Konvertierung in LabVIEW eingebaut werden kann. Wie binde ich sie an? 
 
Für jede hilfreiche Antwort wäre ich sehr dankbar 
 
 
Grüßle, 
 
honey
				 
				
				
				
				
				 
			 | 
                              
                 
				
 
 
				 
 | 
		 
		
			| 
				
			 | 
		 
	
 
	
		
			
				
					27.04.2010, 18:55   
(Dieser Beitrag wurde zuletzt bearbeitet: 27.04.2010 18:57  von rolfk.)
				 
				
  Beitrag #2 
			 | 
		 
		
		
			
                                 
					
                                                 
				
                    
                     
                             
                       
                            rolfk 
 
 
                            
                                LVF-Guru 
                                      
                                
  
                            
                            
	Beiträge: 2.318 
	Registriert seit: Jun 2007
	
 
 
alle seit 6.0 
1992 
EN 
 
2901GG 
Niederlande 
			 | 
                              
DLL als Wrapperfunktion 
				
					' schrieb:Hallo, 
 
typedef struct __Object * testRef; 
 
typedef testRef var1Ref; 
typedef testRef var2Ref; 
 
unsigned int retain(Ref testRef); 
Mehr ist mir über über dieses Struct nicht bekannt... 
Also da ist wohl etwas falsch gegangen beim übertragen. Wohl normalerweise ein Delphi Programmierer?   
In C würde der Funktionsprototyp wohl eher so aussehen:
 
unsigned int retain(testRef <irgend ein Name>);
 
Da ist der Datentyp zuerst, anders als bei Delphi/Pascal.
 
Da dies ein Pointer auf eine opaque (also ungekannte) Datenstruktur ist, brauchst Du dafür nicht unbedingt einen Wrapper in LabVIEW. Du behandelst diese Variable in der LabVIEW Call Library Node ganz einfach als Pointer-Sized Integer, et voila.
 
Der Import Library Wizard kann nicht wirklich wissen was er machen muss, da testRef eine sogenannte unbeendete Datentypdeklaration ist. Ein C Compiler lässt das grundsätzlich zu, aber natürlich kann man mit dem Parameter selber nichts machen. Meist wird das verwendet um eine Struktur ausserhalb der eigentlichen Funktion als opaquen (also unbestimmten) Datentypen zu verwenden, sodass Benützer dieser Funktion keinerlei Annahmen über den Inhalt machen können, die bei späteren Versionen Kompatibilitätsprobleme verursachen können. In diesem Fall kann man nämlich innerhalb der Library bei neuen Versionen diese Struktur beliebig anpassen ohne dass eventuelle Benützer dieser Library plötzlich ins Blaue greifen, weil sie auf bestimmte Informationen in der Struktur an einem bestimmten Offset zugreifen wollen.
				  
				
				
 
				
				
				 
			 | 
                              
                 
				
 
 
				 
 | 
		 
		
			| 
				
			 | 
		 
	
 
	
		
			| 
				 
					28.04.2010, 07:19  
				 
				
  Beitrag #3 
			 | 
		 
		
		
			
                                 
					
                                                 
				
                    
                     
                             
                       
                            Honeygirl24 
 
 
                            
                                LVF-Gelegenheitsschreiber 
                                   
                                
  
                            
                            
	Beiträge: 169 
	Registriert seit: Jan 2008
	
 
 
8.5 , 8,6 , 2009, 2010 
2007 
de 
 
90461 
Deutschland 
			 | 
                              
DLL als Wrapperfunktion 
				
					Hallo, 
ich habe mich da wohl nur verschrieben:)Der Code soll schon in C sein.
 
Vielan dank für den Hinweis  
Nur es geht nur über "Instance Data Pointer"
 
vlg 
honey
				  
				
				
				
				
				 
			 | 
                              
                 
				
 | 
		 
		
			| 
				
			 | 
		 
	
 
	
		
			| 
				 
					28.04.2010, 07:55  
				 
				
  Beitrag #5 
			 | 
		 
		
		
			
                                 
					
                                                 
				
                    
                     
                             
                       
                            Honeygirl24 
 
 
                            
                                LVF-Gelegenheitsschreiber 
                                   
                                
  
                            
                            
	Beiträge: 169 
	Registriert seit: Jan 2008
	
 
 
8.5 , 8,6 , 2009, 2010 
2007 
de 
 
90461 
Deutschland 
			 | 
                              
DLL als Wrapperfunktion 
				 
					Hallo, 
 
ich arbeite bereits mit 8.9 Version. Du meinst doch "pointer to value" oder verstehe ich das falsch? 
 
lg
				 
				
				
				
				
				 
			 | 
                              
                 
				
 | 
		 
		
			| 
				
			 | 
		 
	
 
	
		
			| 
				 
					28.04.2010, 08:02  
				 
				
  Beitrag #6 
			 | 
		 
		
		
			
                                 
					
                                                 
				
                    
                     
                             
                       
                            Honeygirl24 
 
 
                            
                                LVF-Gelegenheitsschreiber 
                                   
                                
  
                            
                            
	Beiträge: 169 
	Registriert seit: Jan 2008
	
 
 
8.5 , 8,6 , 2009, 2010 
2007 
de 
 
90461 
Deutschland 
			 | 
                              
DLL als Wrapperfunktion 
				 
					Ok ich habe es vestanden, war nur zu blind den Datentypen zu sehen. Ich hoffe mal dass das so klappt. Wär suppi
				 
				
				
				
				
				 
			 | 
                              
                 
				
 | 
		 
		
			| 
				
			 | 
		 
	
 
	
		
			| 
				 
					28.04.2010, 11:42  
				 
				
  Beitrag #7 
			 | 
		 
		
		
			
                                 
					
                                                 
				
                    
                     
                             
                       
                            Honeygirl24 
 
 
                            
                                LVF-Gelegenheitsschreiber 
                                   
                                
  
                            
                            
	Beiträge: 169 
	Registriert seit: Jan 2008
	
 
 
8.5 , 8,6 , 2009, 2010 
2007 
de 
 
90461 
Deutschland 
			 | 
                              
DLL als Wrapperfunktion 
				 
					Hallo nochmal, 
 
also soweit so gut läuft es so, wie ich es möchte. 
Nur ich habe jetzt folgendes Problem: 
 
Folgende Funktion möchte ich in LabVIEW einbinden: 
 
unsigned int getDeviceInfo(Ref inRef, DeviceInfo *outInfo); 
 
Nun dieses "outInfo" ist ein Zeiger auf ein struct 
 
typedef struct test 
{  
    char name[20]; 
    char descr[100]; 
    unsigned int res; 
} DeviceInfo; 
 
Das krieg ich aus der Funktion raus...Wie handele ich das, damit dies in LabVIEW angezeigt wird?? Ein kleines Example Code wäre sehr hilfreich... 
 
 
vlg 
honey
				 
				
				
				
				
				 
			 | 
                              
                 
				
 | 
		 
		
			| 
				
			 | 
		 
	
 
	
		
			| 
				 
					28.04.2010, 12:37  
				 
				
  Beitrag #8 
			 | 
		 
		
		
			| 
                                 
				
 | 
		 
		
			| 
				
			 | 
		 
	
 
	
		
			| 
				 
					28.04.2010, 12:55  
				 
				
			 | 
		 
		
		
			
                                 
					
                                                 
				
                    
                     
                             
                       
                            Honeygirl24 
 
 
                            
                                LVF-Gelegenheitsschreiber 
                                   
                                
  
                            
                            
	Beiträge: 169 
	Registriert seit: Jan 2008
	
 
 
8.5 , 8,6 , 2009, 2010 
2007 
de 
 
90461 
Deutschland 
			 | 
                              
DLL als Wrapperfunktion 
				
					' schrieb:[attachment=54606:wrap.jpg] +[attachment=54607:Rapper.jpg] = Wrapper? 
ich weiß nicht, was diese bildliche Darstellung bedeuten soll?? Ich dachte das ist ein Forum...
				  
				
				
				
				
				 
			 | 
                              
                 
				
 | 
		 
		
			| 
				
			 | 
		 
	
 
 |  |