But... why don't you simply ask your users for a static string as well??? C++ makes it trivial to support this requirement of the C API.
// pointerType should be a static string void wxSQLite3Statement::Bind(int paramIndex, void* pointer, char *pointerType, void(*DeletePointer)(void*)) Gwendal > Le 3 août 2017 à 17:30, Ulrich Telle <ulrich.te...@gmx.de> a écrit : > > Richard, > >> Can you please provide more details on how having a dynamic string for >> the pointer type would be helpful? What is it that you are trying to >> do that string constant will not work? Please be as specific as >> possible, so that I might better understand your problem. > > I maintain a C++ wrapper library for SQLite especially for developers of > wxWidgets based applications. This wrapper library offers access to almost > all SQLite features (that make sense for an end-user application) through the > use of C++ classes. That is, the wrapper classes encapsulate all calls to the > SQlite C API. > > With the release of SQLite 3.20.0 the new pointer-passing interface was > introduced, and I found it quite useful to support extensions like carray. > Therefore, I implemented a pointer bind method for the prepared SQL statement > classs. This method makes internally a call to function sqlite3_bind_pointer. > The signature and implementation of the method looks like this: > > void wxSQLite3Statement::Bind(int paramIndex, void* pointer, const wxString& > pointerType, void(*DeletePointer)(void*)) > { > CheckStmt(); > const char* localPointerType = m_stmt->MakePointerTypeCopy(pointerType); > int rc = sqlite3_bind_pointer(m_stmt->m_stmt, paramIndex, pointer, > localPointerType, DeletePointer); > } > > The member variable m_stmt is a reference counted reference object to a > prepared SQL statement (sqlite3_stmt). This makes it possible to pass around > the SQL statement object and to clean up the SQLite data structures when the > last reference to the statement is deleted. This reference object now > includes a dynamic array holding pointer type string duplicates until the > reference object itself goes out of scope. > > However, in my first implementation I converted the pointer type string > parameter (wxString object) to a local char* variable. Since this local > variable was destroyed after leaving the method, the select on the carray > table failed, since the pointer type string was void. > > Now, I create a copy of the pointer type string in a data structure that is > kept alive until the SQL statement object is deleted. The carray extension > now works flawlessly in the context of my wrapper. > > For a C++ wrapper you could argue that using the SQLite API directly is > feasible. However, for SQLite wrappers for other languages like Python or > Lua, this might not work out. > > Regards, > > Ulrich > _______________________________________________ > sqlite-users mailing list > sqlite-users@mailinglists.sqlite.org > http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users _______________________________________________ sqlite-users mailing list sqlite-users@mailinglists.sqlite.org http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users