Raza lo que hice fue una dll en visual 6 para utilizarla en .Net

y si me funciona a la perfección pero lo que nito es agregarle el password porque solo me agrega el usuario, el código con el que hice la dll esta en un post abajo de este.
En .Net me da error en esta línea;
Código:
long lResult;
long hKeyHandle;
lResult = RegCreateKey(HKEY_LOCAL_MACHINE, ("SOFTWARE\\ODBC\\ODBC.INI\\" + DataSourceName), hKeyHandle);
lResult = RegSetValueEx(hKeyHandle, "Database", '\0', REG_SZ, DatabaseName, DatabaseName.Length);
lResult = RegSetValueEx(hKeyHandle, "Description", '\0', REG_SZ, Description, Description.Length);
lResult = RegSetValueEx(hKeyHandle, "Driver", '\0', REG_SZ, DriverPath, DriverPath.Length);
lResult = RegSetValueEx(hKeyHandle, "LastUser", '\0', REG_SZ, LastUser, LastUser.Length);
lResult = RegSetValueEx(hKeyHandle, "Server", '\0', REG_SZ, Server, Server.Length);
lResult = RegCloseKey(hKeyHandle);
lResult = RegCreateKey(HKEY_LOCAL_MACHINE, "SOFTWARE\\ODBC\\ODBC.INI\\ODBC Data Sources", hKeyHandle);
lResult = RegSetValueEx(hKeyHandle, DataSourceName, '\0', REG_SZ, DriverName, DriverName.Length);
lResult = RegCloseKey(hKeyHandle);
Me da error en esta linea
Una llamada a la función PInvoke 'ODBC!ODBC.Form1::RegCreateKey' impidió la correspondencia de la pila. Es posible que la razón sea que la firma PInvoke administrada no coincida con la firma de destino no administrada. Compruebe que la convención y los parámetros de llamada de la firma PInvoke coinciden con la firma no administrada de destino.
No se si será por la variable long hKeyHandle = 0; porque si no le pongo el 0 a esa variable me dice que: Uso de la variable local no asignada 'hKeyHandle' pero en realidad no se si deba ser igual a 0
Alguna idea?