Code archives/User Libs/USERLIB DECLS (DLL) TO CSharp (Unity 3D) converter
This code has been declared by its author to be Public Domain code.
Download source code
| |||||
convert DECLS blitz3d file to standard DllImport instructions | |||||
; ; Blitz3D USERLIB DECLS (DLL) TO CSharp (Unity 3D) (c) 2015 ZJP ; PUBLIC DOMAIN ; Dim parameter$(10) Global i% Global DECLS_INPUT_FILE$ Global CPP_OUTPUT_FILE$ Global DECLS_FIRST_CAR$ Global line_input_file$ Global Found_char% Global Alias_Dll$ Global middle$ Global tempo_string$ Global car$ Global nb_param% Global DLL_lib$ Global CALLING_example$ Global tempo$ Global PROC_Def$ Global Position% Global Var_TYPE$ Global bof$ Global ok$ ; ; Fichier DECLS - DECLS File <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< Change this !!! DECLS_INPUT_FILE = "Cheetah2.DECLS" ; Lines begin with...<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< Change this !!! DECLS_FIRST_CAR = "xdb" ; DLL Name<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< Change this !!! DLL_lib = "Cheetah2" CPP_OUTPUT_FILE = DLL_lib + ".cs" ; file_in% = OpenFile(DECLS_INPUT_FILE) file_out% = WriteFile(CPP_OUTPUT_FILE) ; WriteLine(file_out,"") WriteLine(file_out,"using UnityEngine;") WriteLine(file_out,"using System.Collections;") WriteLine(file_out,"using System.Runtime.InteropServices;") WriteLine(file_out,"") WriteLine(file_out,"public class " + DLL_lib + " : MonoBehaviour") WriteLine(file_out,"{") ; While Not Eof(file_in) line_input_file$ = ReadLine$( file_in ) ; Remove all spaces in the input line tempo="" For i=1 To Len(line_input_file$) car$=Mid(line_input_file$,i,1) If car$<>" " Then tempo$=tempo$+car$ Next line_input_file$=tempo$ ; Select only the line began with "px" in this example If Left(line_input_file, Len(DECLS_FIRST_CAR)) <> DECLS_FIRST_CAR Then Goto suivant ; find the Alias Found_char = Instr(line_input_file, ":", 1) Alias_Dll = Mid(line_input_file, Found_char + 1) ; CALLING_example = "[DllImport (" + Chr(34) + DLL_lib + Chr(34) + ", EntryPoint = " + Alias_Dll + ")]" + Chr(13) + Chr(9) + Chr(9) + "private static extern " CALLING_example = Chr(9)+ "[DllImport (" + Chr(34) + DLL_lib + Chr(34) + ", EntryPoint = " + Alias_Dll + ")] private static extern " middle = " " ; Var_TYPE >> % # Or $ * Found_char = Instr(line_input_file, "(", 1) Var_TYPE = Mid(line_input_file, Found_char - 1, 1) ; % Integer If Var_TYPE = "%" Then tempo = Left(line_input_file, Found_char - 2) CALLING_example = CALLING_example + "int " End If ; # Float If Var_TYPE = "#" Then tempo = Left(line_input_file, Found_char - 2) CALLING_example = CALLING_example + "float " End If ; $ STRING If Var_TYPE = "$" Then tempo = Left(line_input_file, Found_char - 2) CALLING_example = CALLING_example + "string " End If ; * POINTER If Var_TYPE = "*" Then tempo = Left(line_input_file, Found_char - 2) CALLING_example = CALLING_example + "ptr " End If ; void If Var_TYPE <> "#" And Var_TYPE <> "%" And Var_TYPE <> "$" And Var_TYPE <> "*" Then tempo = Left(line_input_file, Found_char - 1) CALLING_example = CALLING_example + "void " End If ; Nbr of parameters If Mid(line_input_file, Found_char + 1, 1) = ")" Then middle = ");" Goto continue End If ; parameters ; remove the ( ) tempo_string = "" nb_param = 0 For i = Found_char + 1 To 1000 car = Mid(line_input_file, i, 1) If car = "," Then nb_param = nb_param + 1 parameter(nb_param) = Trim(tempo_string) car = "" tempo_string = "" End If If car = ")" Then nb_param = nb_param + 1 parameter(nb_param) = Trim(tempo_string) tempo_string = "" Exit End If tempo_string = tempo_string + car Next ; parameters middle = " " For i = 1 To nb_param ; % interger If Right(parameter(i), 1) = "%" Then ok = " int " + Left(parameter(i), Len(parameter(i)) - 1) + "," End If ; * pointer If Right(parameter(i), 1) = "*" Then ok = " System.IntPtr " + Left(parameter(i), Len(parameter(i)) - 1) + "," End If ; # float If Right(parameter(i), 1) = "#" Then ok = " float " + Left(parameter(i), Len(parameter(i)) - 1) + "," End If ; $ string If Right(parameter(i), 1) = "$" Then ok = " string " + Left(parameter(i), Len(parameter(i)) - 1) + "," End If middle = middle + ok ok = "" Next ; remove the last ";" If Len(middle)>1 Then middle=Trim(middle) middle = Left(middle, Len(middle) - 1) + ");" .continue WriteLine( file_out,Chr(9)+"// Original DECLS line ==> " + line_input_file) WriteLine( file_out,CALLING_example + tempo + "(" + Trim(middle)) .suivant Wend ; ; WriteLine(file_out,"") WriteLine(file_out,"") WriteLine(file_out,Chr(9)+"void Start ()") WriteLine(file_out,Chr(9)+"{") WriteLine(file_out,Chr(9)+"}") WriteLine(file_out,"}") CloseFile file_in CloseFile file_out End |
Comments
| ||
The title surely sounds interesting and handy enough. I'm curious where one would use this for and why? I'm guessing this could this be used to port some generic Blitz dll's to Unity.. But Hardwired.dll for example and use it in C# (if one would want to do that, the abomination, the horror. lol) would that be feasible/usable/compatible with Unity's very integrated systems? Examples of usage perhaps? Questions, questions, questions.. [edit] Nevermind.. pff. Seeing it here(I must be shortsighted. Wait a second: I am! ;-) Cheetah DB USERLIB DECLS TO CSharp (Unity 3D) converter |
Code Archives Forum