Bob Scriver
asked on
WritePrivateProfileString Function
I am attempting to update the initialization file that I use for my ACCESS database application. I identify it in the shortcut and use the SystemDB= line to strip off the location of the back-end database.mdb so that a ReAttach routine knows where to refresh the links to. This is done routinely whenever a new front-end is sent out.
As a result of new servers being installed and the systems engineers renaming the servers with a slighly different naming convention I just test for the ability to read a file at the old location and if unsuccessful then update the .ini file on the PC c:\winnt location with the new naming convention and trigger the reattachment routine.
Problem is I am having a hard time getting the Declaration and call to the function correct. I need a little help.
app.ini file
[Options]
SystemDB=\\GH9010_1\data\s ystem.mdw
I want to change the underscore to a hyphen: -
What I have done so far:
General Declarations
Private Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileString A" (ByVal lpAppName, ByVal lpKeyName, ByVal lpString, ByVal lpFileName) As Long
Dim xReturnedIniWriteValue As Long
xReturnedIniWriteValue = WritePrivateProfileString( "[Options] ", "SystemDB", "\\GH9010-1\data\system.md w", "app.ini")
After executing the above statement I get a Dr. Watson error and system crashes.
Anyone awake out there.
Bob Scriver
As a result of new servers being installed and the systems engineers renaming the servers with a slighly different naming convention I just test for the ability to read a file at the old location and if unsuccessful then update the .ini file on the PC c:\winnt location with the new naming convention and trigger the reattachment routine.
Problem is I am having a hard time getting the Declaration and call to the function correct. I need a little help.
app.ini file
[Options]
SystemDB=\\GH9010_1\data\s
I want to change the underscore to a hyphen: -
What I have done so far:
General Declarations
Private Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileString
Dim xReturnedIniWriteValue As Long
xReturnedIniWriteValue = WritePrivateProfileString(
After executing the above statement I get a Dr. Watson error and system crashes.
Anyone awake out there.
Bob Scriver
ASKER
I don't understand how that could be. The parameter is just a string represenation of exactly what I want to be placed behind the SystemDB= in the [Options] section of the app.ini. To put double backslashes will just place exactly that in the app.ini.
Does the API call analyze the string going to be written before it writes it? What is the final product of the write call. four backslashes or two? It must be two to represent the network representation of where the system.mdw file is located.
Bob Scirver
Does the API call analyze the string going to be written before it writes it? What is the final product of the write call. four backslashes or two? It must be two to represent the network representation of where the system.mdw file is located.
Bob Scirver
ASKER
I have solved my own problem. Amazing what 5 hours of sleep will do for one's logic.
The declaration statement was not appropriate for 32-bit NT.
16-bit:
32-bit:
Declare Function apiWritePrivateProfileStri ng Lib _
"kernel32" Alias "WritePrivateProfileString A"
(ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpString As Any, ByVal lpFileName As String) As Long
The declaration statement was not appropriate for 32-bit NT.
16-bit:
32-bit:
Declare Function apiWritePrivateProfileStri
"kernel32" Alias "WritePrivateProfileString
(ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpString As Any, ByVal lpFileName As String) As Long
ASKER
I have solved my own problem. Amazing what 5 hours of sleep will do for one's logic.
The declaration statement was not appropriate for 32-bit NT.
16-bit:
32-bit:
Declare Function apiWritePrivateProfileStri ng Lib _
"kernel32" Alias "WritePrivateProfileString A"
(ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpString As Any, ByVal lpFileName As String) As Long
The declaration statement was not appropriate for 32-bit NT.
16-bit:
32-bit:
Declare Function apiWritePrivateProfileStri
"kernel32" Alias "WritePrivateProfileString
(ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpString As Any, ByVal lpFileName As String) As Long
ASKER
Sorry I wasn't done with the explaination. Fatfingered the enter key by mistake.
There is a difference between the 16-bit and 32-bit API Declaration statements. The following link to MSKB will list the common calls and their appropriate conversions.
http://support.microsoft.com/support/kb/articles/Q147/7/81.asp?LN=EN-US&SD=gn&FR=0&qry=writeprivateprofilestring&rnk=1&src=DHCS_MSPSS_gn_SRCH&SPR=ACC97
See WritePrivateProfileString near the bottom.
After updating my Declaration statement with the changes it all worked correctly. I will leave this question posted for a while so others may benefit from what I have found but then I will be deleting it.
BozzoCage: Thanks for the comeback but that was not the answer. As I stated earlier the \\ were just string characters and shouldn't have been analyzed by the API call.
Bob Scriver
There is a difference between the 16-bit and 32-bit API Declaration statements. The following link to MSKB will list the common calls and their appropriate conversions.
http://support.microsoft.com/support/kb/articles/Q147/7/81.asp?LN=EN-US&SD=gn&FR=0&qry=writeprivateprofilestring&rnk=1&src=DHCS_MSPSS_gn_SRCH&SPR=ACC97
See WritePrivateProfileString near the bottom.
After updating my Declaration statement with the changes it all worked correctly. I will leave this question posted for a while so others may benefit from what I have found but then I will be deleting it.
BozzoCage: Thanks for the comeback but that was not the answer. As I stated earlier the \\ were just string characters and shouldn't have been analyzed by the API call.
Bob Scriver
You'r right. \\ shouldn't be analyzed by APIs. I do remember that somewhere it is... I read about this, so I blindly guessed here with no real testing of your example.
I'm glad you figured this out yourself :-)
Best wishes,
BozzoCage
I'm glad you figured this out yourself :-)
Best wishes,
BozzoCage
Hi scriverb,
I posted this https://www.experts-exchange.com/jsp/qManageQuestion.jsp?ta=commspt&qid=20167228 request at CS TA to PAQ this question and return the question point back to you.
Congrats for solving the problem by your self.
Nostedamus
I posted this https://www.experts-exchange.com/jsp/qManageQuestion.jsp?ta=commspt&qid=20167228 request at CS TA to PAQ this question and return the question point back to you.
Congrats for solving the problem by your self.
Nostedamus
ASKER
Nostedamus:
Thanks for the assistance. I didn't want to delete the question because I felt that it might be helpful to others. Thanks again.
Bob Scriver
Thanks for the assistance. I didn't want to delete the question because I felt that it might be helpful to others. Thanks again.
Bob Scriver
;-)
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
...SystemDB", "\\\\GH9010-1\\data\\syste