|
ForNow wrote: After I finish inserting the bytes do I have to add a null 0x00 to complete the string or string will do that automatically ?
If you mean an std::string then you you don't have to add a terminating null character.
|
|
|
|
|
Thanks I think the fact that I was inserting a null byte into a string caused the assertion
Thank you
|
|
|
|
|
I compiled, with Visual C++ 2022, and run (successfully) the following code:
#include <iostream>
using namespace std;
typedef unsigned char BYTE;
struct source
{
string stmt;
string loc;
string addr1;
string addr2;
};
string convertToString(unsigned char* a, int size)
{
int i;
string s = "";
for (i = 0; i < size; i++) {
s += a[i];
}
return s;
}
int main()
{
BYTE statementnumber[4];
source * returnsource = new source;
returnsource->stmt = convertToString(statementnumber, 4);
delete returnsource;
}
"In testa che avete, Signor di Ceprano?"
-- Rigoletto
|
|
|
|
|
I look at my code again the only difference I see is that my code is part of a DLL the pointer “return source” is a parameter passed by the invoking program it allocated on the heap via new
Thanks
|
|
|
|
|
Hi,
I want to work with a MYSQL database with jdbc using C++.
I have started with connection and I saw in an example the following statement:
con = driver->connect("host", "usert", "password");
I found the connect declaration in the driver.h header as a connection type, but I don't know where to find the definition of the connect.
Can anybody help me please with finding its definiton?
Thank you,
|
|
|
|
|
|
|
Yes, I have installed Connector C++ 8.0, in the link below it is explained that Conector C++ 8.0 supports "legacy C++ API based on the JDBC4",
and there is an exemplified code where appear the "connect" statement, and I am not able to understand where is defined to see it's functions or more
details.
https://dev.mysql.com/doc/dev/connector-cpp/8.0/jdbc_ref.html
Thank you.
|
|
|
|
|
I think you will need to search the documentation, or use the MySQL forum.
|
|
|
|
|
When I installed Connector C++, there were unziped the headers that contains declarations of classes and functions.
I suposed that is logical to find the declaration of these functions, clases constructors etc on those .h files.
I found connect declaration in driver.h file:
class CPPCONN_PUBLIC_FUNC Driver
{
protected:
virtual ~Driver() {}
public:
virtual Connection * connect(const sql::SQLString& hostName, const sql::SQLString& userName, const sql::SQLString& password) = 0;
virtual Connection * connect(ConnectOptionsMap & options) = 0;
virtual int getMajorVersion() = 0;
virtual int getMinorVersion() = 0;
virtual int getPatchVersion() = 0;
virtual const sql::SQLString & getName() = 0;
virtual void setCallBack(sql::Fido_Callback &cb) = 0;
virtual void setCallBack(sql::Fido_Callback &&cb) = 0;
virtual void threadInit() = 0;
virtual void threadEnd() = 0;
};
And I found that the connection type(or class) of the connect defined in the connection.h file:
class CPPCONN_PUBLIC_FUNC Connection
{
Connection(const Connection &);
void operator=(Connection &);
public:
Connection() {};
virtual ~Connection() {};
virtual void clearWarnings() = 0;
virtual Statement *createStatement() = 0;
virtual void close() = 0;
virtual void commit() = 0;
virtual bool getAutoCommit() = 0;
virtual sql::SQLString getCatalog() = 0;
virtual Driver *getDriver() = 0;
virtual sql::SQLString getSchema() = 0;
virtual sql::SQLString getClientInfo() = 0;
virtual void getClientOption(const sql::SQLString & optionName, void * optionValue) = 0;
virtual sql::SQLString getClientOption(const sql::SQLString & optionName) = 0;
virtual DatabaseMetaData * getMetaData() = 0;
virtual enum_transaction_isolation getTransactionIsolation() = 0;
virtual const SQLWarning * getWarnings() = 0;
virtual bool isClosed() = 0;
virtual bool isReadOnly() = 0;
virtual bool isValid() = 0;
virtual bool reconnect() = 0;
virtual sql::SQLString nativeSQL(const sql::SQLString& sql) = 0;
virtual PreparedStatement * prepareStatement(const sql::SQLString& sql) = 0;
virtual PreparedStatement * prepareStatement(const sql::SQLString& sql, int autoGeneratedKeys) = 0;
virtual PreparedStatement * prepareStatement(const sql::SQLString& sql, int* columnIndexes) = 0;
virtual PreparedStatement * prepareStatement(const sql::SQLString& sql, int resultSetType, int resultSetConcurrency) = 0;
virtual PreparedStatement * prepareStatement(const sql::SQLString& sql, int resultSetType, int resultSetConcurrency, int resultSetHoldability) = 0;
virtual PreparedStatement * prepareStatement(const sql::SQLString& sql, sql::SQLString columnNames[]) = 0;
virtual void releaseSavepoint(Savepoint * savepoint) = 0;
virtual void rollback() = 0;
virtual void rollback(Savepoint * savepoint) = 0;
virtual void setAutoCommit(bool autoCommit) = 0;
virtual void setCatalog(const sql::SQLString& catalog) = 0;
virtual void setSchema(const sql::SQLString& catalog) = 0;
virtual sql::Connection * setClientOption(const sql::SQLString & optionName, const void * optionValue) = 0;
virtual sql::Connection * setClientOption(const sql::SQLString & optionName, const sql::SQLString & optionValue) = 0;
virtual void setHoldability(int holdability) = 0;
virtual void setReadOnly(bool readOnly) = 0;
virtual Savepoint * setSavepoint() = 0;
virtual Savepoint * setSavepoint(const sql::SQLString& name) = 0;
virtual void setTransactionIsolation(enum_transaction_isolation level) = 0;
};
Maybe this operator:
void operator=(Connection &); , tries to tell something that I don't understand I will keep digging to understand something.
Thank you,
|
|
|
|
|
coco243 wrote: Maybe this operator: It is a simple overload of the assignment operator in C++. But is has very little to do with your question. The method you need to use is at the beginning:
virtual Connection * connect(const sql::SQLString& hostName, const sql::SQLString& userName, const sql::SQLString& password) = 0;
|
|
|
|
|
Yes, but I don't know where to find the definition of this method.
I don't find the code behind it.
|
|
|
|
|
That is the definition of the method. You just need to code it with all the parameters filled in as necessary.
|
|
|
|
|
I don't see where I am misunderstand the things but it appears to me as a declaration of a method.
For example if we have a class defined like that:
class point{
public:
int x,y;
void set (int val_x, int val_y); };
void point::set( int val_x, int val_y)
x = val_x;
y = val_y;
}
void main()
{
point p1;
p1.set(10,2);
}
In the set method I have the parameters val_x and val_y, and I see in the definition of the set method the processes that implies val_x, and val_y,
I see that val_x is attributed to x and so over, but in the connect method I don't see where hostName, userName and password are used.
That it what I want to understand.
Thank you,
|
|
|
|
|
coco243 wrote: in the connect method I don't see where hostName, userName and password are used. Why do you need to? All you really need to understand is that the C++ library will use those details to create an actual connection to the MySQL driver, and from there to the actual database server.
|
|
|
|
|
I had figured that if I know how this function is defined, I can extract more information about the conection, status of conection and other things that I am not aware, in addition I wanted to have a better overview on the subject.
modified 10-Jan-23 10:25am.
|
|
|
|
|
All such information would normally be found in the documentation. And after searching the MySQL pages I think you need to look at https://dev.mysql.com/doc/c-api/8.0/en/[^]. it is titled "C APIO", but I assume it works just as well with the C++ driver.
|
|
|
|
|
Normaly this information should be in the installation folders of the C++ connector, in the headers files, and some of it, it is, but I just don' t know where to find definition of those methods, any way I supose that I will succed finally, but it would have been intresting to know how this method were coded. Or maybe those would be an waste of time or to complicate for my knowledge level.
|
|
|
|
|
I gave you a link to the API in my previous message, you need to go and study it.
|
|
|
|
|
|
|
|
|
Hi,
I built a function library (dll) in MS-Visual Studio 2022 using C/C++, to be accessed directly from Excel cells via VBA code.
When I call the dll in the 32-bit version of Microsoft 365 Excel, no error occurs. But when I compile the dll for x64 and run it from the 64-bit version, an access violation occurs in the function arguments.
Summarizing the project in a single function:
---------------------------------------------------------------
.cpp file:
extern "C"
{
__declspec(dllexport) double __stdcall fA(INT64&);
}
double __stdcall fA(double& a)
{
return a;
}
-------------------------------------------------------------
VBA da planilha Excel:
Declare PtrSafe Function fA _
Lib "C:\dll64\dll64.dll" (ByRef a As Double) As Double
-------------------------------------------------------------
|
|
|
|
|
Why did you declared it as
double __stdcall fA(INT64&); not as
double __stdcall fA(double&);
|
|
|
|