1
Answer

PInvoke & DllImport

pat 0

pat 0

21y
3.4k
1
Hey All, I'm trying to access a non COM compliant dll written by MS Great Plains called crypto.dll here's its methods: VOID WINAPI CryptoInit(CSTR_PTR regkeystring) This must be called before using any other functions !! It must be passed a 1 character "X" c-string ("X") - this is the current "Registration key string" for this DLL - all functions are inoperable until they are unlocked with this key string VOID WINAPI TableColumnEncrypt(CSTR_PTR datastring, LONG method ) VOID WINAPI TableColumnDecrypt(CSTR_PTR datastring, LONG method ) For these 2, the c-string format datastring is converted in-place, and the only method currently supported is method=0 - This may change in the future if the encryption algorithm changes. 'INT WINAPI EncodeSQLPass(LPSTR input_string, LPSTR output_string ) 'INT WINAPI DecodeSQLPass(LPSTR input_string, LPSTR output_string ) I wrote a class in my asp.net(c#) app to access it as follows: public class crypto { [DllImport("crypto.dll")] public static extern void CryptoInit(string regkeystring); [DllImport("crypto.dll")] public static extern long TableColumnEncrypt([MarshalAs(UnmanagedType.LPStr)]string datastring, long method); [DllImport("crypto.dll")] public static extern long TableColumnDecrypt([MarshalAs(UnmanagedType.LPStr)]string datastring, long method); [DllImport("crypto.dll")] public static extern string EncodeSQLPass([MarshalAs(UnmanagedType.LPStr)]string input_string); [DllImport("crypto.dll")] public static extern string DecodeSQLPass([MarshalAs(UnmanagedType.LPStr)]string input_string); } The documentation has a sample VB 6 file to use it, the core is the following: ' used for "encrypted columns of dex tables" use method = 0 'VOID WINAPI TableColumnEncrypt(LPSTR datastring, LONG method ) Declare Sub TableColumnEncrypt Lib "crypto.dll" (ByVal datastring As String, ByVal method As Long) 'VOID WINAPI TableColumnDecrypt(LPSTR datastring, LONG method ) Declare Sub TableColumnDecrypt Lib "crypto.dll" (ByVal datastring As String, ByVal method As Long) ' used for passing data to DPS - must use correct key passed in the method param. 'VOID WINAPI SensitiveDataEncrypt(LPSTR in_string,LONG key ) Declare Sub SensitiveDataEncrypt Lib "crypto.dll" (ByVal datastring As String, ByVal method As Long) 'VOID WINAPI SensitiveDataEncrypt(LPSTR in_string,LONG key ) Declare Sub SensitiveDataDecrypt Lib "crypto.dll" (ByVal datastring As String, ByVal method As Long) ' used for encrypting SQL password in dex table 'INT WINAPI EncodeSQLPass(LPSTR input_string, LPSTR output_string ) Declare Sub EncodeSQLPass Lib "crypto.dll" (ByVal input_string As String, ByVal output_string As String) 'INT WINAPI DecodeSQLPass(LPSTR input_string, LPSTR output_string ) Declare Sub DecodeSQLPass Lib "crypto.dll" (ByVal input_string As String, ByVal output_string As String) ' must be called first with the correct regkeystring to use this dll Declare Sub CryptoInit Lib "crypto.dll" (ByVal regkeystring As String) I think I basically need to convert the above into C# and I am just having problems with it. My first time using DllImport. Thanks for your help.

Answers (1)