- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
How can I use StringTables in Visual Fortran 6.5, as I do in Visual C++ 6.0?
Thank you.
Thank you.
Link Copied
1 Reply
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
It's easy -- just use LoadString. Most troubles, however, come from totally different treatment of string variables in two languages (null-terminated vs. fixed length). I use the following routines for manipulating strings from string tables. Actually, all language-dependent strings are stripped from the main application and placed in .dlls. Application loads appropriate dll at start (which contains also language-specific menus and dialogs) and everything is later loaded using LoadString:
Few usage samples:
In WinMain.f90:
When loading strings:
When working with dialogs:
etc...
HTH
Jugoslav
MODULE LANGDEP USE DFWIN IMPLICIT NONE PUBLIC INCLUDE "lang.fd" !"Resource.fd" from dll's rc file INTEGER, PUBLIC:: hLangLib !Handle of resource dll ! PUBLIC OPERATOR (/) !Concatenation -- Stripped for brevity ! PUBLIC OPERATOR (//) !Concatenation -- Stripped for brevity PUBLIC OPERATOR (.S.) PUBLIC OPERATOR (.C.) PUBLIC ASSIGNMENT (=) PRIVATE StrAssign PRIVATE C2F INTERFACE OPERATOR (.S.) MODULE PROCEDURE StrLoad END INTERFACE INTERFACE OPERATOR (.C.) MODULE PROCEDURE CStrLoad END INTERFACE INTERFACE ASSIGNMENT (=) MODULE PROCEDURE StrAssign END INTERFACE !==================================================== CONTAINS !==================================================== RECURSIVE CHARACTER(256) FUNCTION StrLoad(i) RESULT(sR) !Load a blank-terminated string INTEGER, INTENT(IN):: i IF (LoadString(hLangLib, i, sR, LEN(sR)).GT.0) THEN sR = C2F(sR) ELSE sR = "" END IF END FUNCTION StrLoad !===================================================== RECURSIVE CHARACTER(256) FUNCTION CStrLoad(i) RESULT(sR) !Load a null-terminated string INTEGER, INTENT(IN):: i IF (.NOT. (LoadString(hLangLib, i, sR, LEN(sR)).GT.0)) sR = CHAR(0) END FUNCTION CStrLoad !===================================================== SUBROUTINE StrAssign(s, i) !Operator (=) (returns Fortran string) INTEGER, INTENT(IN):: i CHARACTER(*), INTENT(OUT):: s IF (LoadString(hLangLib, i, s, LEN(s)).GT.0) THEN s = C2F(s) ELSE s="" END IF END SUBROUTINE StrAssign !===================================================== FUNCTION C2F(sStr) RESULT(sR) !C string to Fortran string conversion CHARACTER(*),INTENT(IN):: sStr CHARACTER(LEN=LEN(sStr)):: sR INTEGER:: nRes nRes=INDEX(sStr,CHAR(0)) IF (nRes.EQ.0) RETURN sR=sStr(1:nRes-1) END FUNCTION C2F !===================================================== END MODULE LANGDEP
Few usage samples:
In WinMain.f90:
hLangLib = LoadLibrary("dmdEng.dll")
When loading strings:
USE LANGDEP...szString = IDS_TITLE
When working with dialogs:
USE DFLOGM USE LANGDEP iSt=DlgInit(IDD_MYDIALOG, hLangLib, Dlg) iSt=DlgSet(Dlg, IDC_EDIT1, .S.IDS_STRINGX)
etc...
HTH
Jugoslav
Reply
Topic Options
- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page