Hallo,
ich schreibe ein Programm, mit dem man normalen Text in die Blindenkurzschrift übersetzen kann. Zu VB6-Zeiten habe ich die erste Version geschrieben. Damals stand ich vor dem gleichen Problem und habe es gelöst, indem ich vorcompilierte EXE-Dateien verwendet habe. Nun möchte ich es richtig machen und die C-DLL einbinden und die Funktionen direkt aus dem Programm heraus aufrufen. Das Programm schreibe ich in VB2015.
Nun zum Programm:
Es gibt die Textboxen "Ungekuerztztext" und "Gekuerzttext". In der ersten Textbox steht der ursprüngliche Text. Nach Aufruf der entsprechenden Funktion soll der gekürzte Text (eine Art von Stenographie) im zweiten Textfeld erscheinen. Die Funktion, die verwendet wird, erwartet neben den Textboxen und ihren Längen auch eine Übersetzungstabelle, in der die Abkürzungen und Regeln aufgelistet sind.
Funktionsdeclaration in der DLL:
Im VB-Programm habe ich folgenden Code stehen:
In der Variablen "AktuelleUebersetzungstabelle" steht der Dateiname der entsprechenden Übersetzungsdatei.
Am Ende meines Beitrages füge ich die Beschreibung der Funktion "lou_translateString" hinzu.
Ich habe hier im Forum schon gesucht und auch Beiträge gefunden. Soweit ich verstanden habe, muß man die Übergabeparameter mit "marshal..." umwandeln. Ich habe es aber leider noch nicht hinbekommen. Es wäre sehr nett, wenn Jemand den obigen Code umwandeln könnte. Vielleicht verstehe ich es anhand meines eigenen Codes dann besser.
Vielen Dank schon einmal für eure Hilfe!
P.S.: Ich möchte mich dafür entschuldigen, daß ich die Codeausschnitte nicht richtig formatiert habe, aber wenn man einen Screenreader verwendet, sind Formatierungen manchmal etwas schwierig.
--> Edit by hal2000: Ich hab' das mal erledigt.
Beschreibung von "lou_translateString":
Spoiler anzeigen
ich schreibe ein Programm, mit dem man normalen Text in die Blindenkurzschrift übersetzen kann. Zu VB6-Zeiten habe ich die erste Version geschrieben. Damals stand ich vor dem gleichen Problem und habe es gelöst, indem ich vorcompilierte EXE-Dateien verwendet habe. Nun möchte ich es richtig machen und die C-DLL einbinden und die Funktionen direkt aus dem Programm heraus aufrufen. Das Programm schreibe ich in VB2015.
Nun zum Programm:
Es gibt die Textboxen "Ungekuerztztext" und "Gekuerzttext". In der ersten Textbox steht der ursprüngliche Text. Nach Aufruf der entsprechenden Funktion soll der gekürzte Text (eine Art von Stenographie) im zweiten Textfeld erscheinen. Die Funktion, die verwendet wird, erwartet neben den Textboxen und ihren Längen auch eine Übersetzungstabelle, in der die Abkürzungen und Regeln aufgelistet sind.
Funktionsdeclaration in der DLL:
Im VB-Programm habe ich folgenden Code stehen:
VB.NET-Quellcode
- Imports System.Runtime.InteropServices
- Public Class Form1
- Private Declare Function lou_translateString Lib "liblouis-2.dll" (ByRef tableList As String, ByRef inbuf As String, inlen As Integer, outbuf As String, outlen As Integer, typeform As Byte, spacing As Byte, mode As Integer) As Integer
- Public Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
- Programmverzeichnis = Application.StartupPath
- end sub
- Public Sub TextUebersetzen()
- lou_translateString(Programmverzeichnis & "\Braille\Brailletabellen\" & AktuelleUebersetzungstabelle, UngekuerztText.Text, Len(UngekuerztText.Text), GekuerztText.Text, Len(UngekuerztText.Text), 0, 0, 0)
- end sub
- End Class
In der Variablen "AktuelleUebersetzungstabelle" steht der Dateiname der entsprechenden Übersetzungsdatei.
Am Ende meines Beitrages füge ich die Beschreibung der Funktion "lou_translateString" hinzu.
Ich habe hier im Forum schon gesucht und auch Beiträge gefunden. Soweit ich verstanden habe, muß man die Übergabeparameter mit "marshal..." umwandeln. Ich habe es aber leider noch nicht hinbekommen. Es wäre sehr nett, wenn Jemand den obigen Code umwandeln könnte. Vielleicht verstehe ich es anhand meines eigenen Codes dann besser.
Vielen Dank schon einmal für eure Hilfe!
P.S.: Ich möchte mich dafür entschuldigen, daß ich die Codeausschnitte nicht richtig formatiert habe, aber wenn man einen Screenreader verwendet, sind Formatierungen manchmal etwas schwierig.
--> Edit by hal2000: Ich hab' das mal erledigt.
Beschreibung von "lou_translateString":
This function takes a string of 16-bit Unicode characters in `inbuf'
and translates it into a string of 16-bit characters in `outbuf'. Each
16-bit character produces a particular dot pattern in one braille cell
when sent to an embosser or braille display or to a screen type font.
Which 16-bit character represents which dot pattern is indicated by the
character-definition and display opcodes in the translation table.
The `tableList' parameter points to a list of translation tables
separated by commas. If only one table is given, no comma should be
used after it. It is these tables which control just how the
translation is made, whether in Grade 2, Grade 1, or something else.
liblouis knows where to find all the tables that have been
distributed with it. So you can just give a table name such as
`en-us-g2.ctb' and liblouis will load it. You can also give a table
name which includes a path. If this is the first table in a list, all
the tables in the list must be on the same path. You can specify a path
on which liblouis will look for table names by setting the environment
variable `LOUIS_TABLEPATH'. This environment variable can contain one or
more paths separated by commas. On receiving a table name liblouis
first checks to see if it can be found on any of these paths. If not,
it then checks to see if it can be found in the current directory, or,
if the first (or only) name in a table list, if it contains a path
name, can be found on that path. If not, it checks to see if it can be
found on the path where the distributed tables have been installed. If
a table has already been loaded and compiled this path-checking is
skipped.
The tables in a list are all compiled into the same internal table.
The list is then regarded as the name of this table. As explained in
*Note How to Write Translation Tables::, each table is a file which may
be plain text, big-endian Unicode or little-endian Unicode. A table (or
list of tables) is compiled into an internal representation the first
time it is used. Liblouis keeps track of which tables have been
compiled. For this reason, it is essential to call the `lou_free'
function at the end of your application to avoid memory leaks. Do _NOT_
call `lou_free' after each translation. This will force liblouis to
compile the translation tables each time they are used, leading to
great inefficiency.
Note that both the `*inlen' and `*outlen' parameters are pointers to
integers. When the function is called, these integers contain the
maximum input and output lengths, respectively. When it returns, they
are set to the actual lengths used.
The `typeform' parameter is used to indicate italic type, boldface
type, computer braille, etc. It is a string of characters with the same
length as the input buffer pointed to by `*inbuf'. However, it is used
to pass back character-by-character results, so enough space must be
provided to match the `*outlen' parameter. Each character indicates
the typeform of the corresponding character in the input buffer. The
values are as follows: 0 plain-text; 1 italic; 2 bold; 4 underline; 8
computer braille. These values can be added for multiple emphasis. If
this parameter is `NULL', no checking for type forms is done. In
addition, if this parameter is not `NULL', it is set on return to have
an 8 at every position corresponding to a character in `outbuf' which
was defined to have a dot representation containing dot 7, dot 8 or
both, and to 0 otherwise.
The `spacing' parameter is used to indicate differences in spacing
between the input string and the translated output string. It is also
of the same length as the string pointed to by `*inbuf'. If this
parameter is `NULL', no spacing information is computed.
The `mode' parameter specifies how the translation should be done.
The valid values of mode are listed in `liblouis.h'. They are all
powers of 2, so that a combined mode can be specified by adding up
different values.
The function returns 1 if no errors were encountered and 0 if a
complete translation could not be done.
and translates it into a string of 16-bit characters in `outbuf'. Each
16-bit character produces a particular dot pattern in one braille cell
when sent to an embosser or braille display or to a screen type font.
Which 16-bit character represents which dot pattern is indicated by the
character-definition and display opcodes in the translation table.
The `tableList' parameter points to a list of translation tables
separated by commas. If only one table is given, no comma should be
used after it. It is these tables which control just how the
translation is made, whether in Grade 2, Grade 1, or something else.
liblouis knows where to find all the tables that have been
distributed with it. So you can just give a table name such as
`en-us-g2.ctb' and liblouis will load it. You can also give a table
name which includes a path. If this is the first table in a list, all
the tables in the list must be on the same path. You can specify a path
on which liblouis will look for table names by setting the environment
variable `LOUIS_TABLEPATH'. This environment variable can contain one or
more paths separated by commas. On receiving a table name liblouis
first checks to see if it can be found on any of these paths. If not,
it then checks to see if it can be found in the current directory, or,
if the first (or only) name in a table list, if it contains a path
name, can be found on that path. If not, it checks to see if it can be
found on the path where the distributed tables have been installed. If
a table has already been loaded and compiled this path-checking is
skipped.
The tables in a list are all compiled into the same internal table.
The list is then regarded as the name of this table. As explained in
*Note How to Write Translation Tables::, each table is a file which may
be plain text, big-endian Unicode or little-endian Unicode. A table (or
list of tables) is compiled into an internal representation the first
time it is used. Liblouis keeps track of which tables have been
compiled. For this reason, it is essential to call the `lou_free'
function at the end of your application to avoid memory leaks. Do _NOT_
call `lou_free' after each translation. This will force liblouis to
compile the translation tables each time they are used, leading to
great inefficiency.
Note that both the `*inlen' and `*outlen' parameters are pointers to
integers. When the function is called, these integers contain the
maximum input and output lengths, respectively. When it returns, they
are set to the actual lengths used.
The `typeform' parameter is used to indicate italic type, boldface
type, computer braille, etc. It is a string of characters with the same
length as the input buffer pointed to by `*inbuf'. However, it is used
to pass back character-by-character results, so enough space must be
provided to match the `*outlen' parameter. Each character indicates
the typeform of the corresponding character in the input buffer. The
values are as follows: 0 plain-text; 1 italic; 2 bold; 4 underline; 8
computer braille. These values can be added for multiple emphasis. If
this parameter is `NULL', no checking for type forms is done. In
addition, if this parameter is not `NULL', it is set on return to have
an 8 at every position corresponding to a character in `outbuf' which
was defined to have a dot representation containing dot 7, dot 8 or
both, and to 0 otherwise.
The `spacing' parameter is used to indicate differences in spacing
between the input string and the translated output string. It is also
of the same length as the string pointed to by `*inbuf'. If this
parameter is `NULL', no spacing information is computed.
The `mode' parameter specifies how the translation should be done.
The valid values of mode are listed in `liblouis.h'. They are all
powers of 2, so that a combined mode can be specified by adding up
different values.
The function returns 1 if no errors were encountered and 0 if a
complete translation could not be done.
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „hal2000“ ()