Yes, str and str2 are Unicode string, 2 bytes per character.
lPos counts per character, not byte, so if the string in the database is
abcde and I want to find the first position
of d in that string then lPos will be 4.

> You are converting in one direction (SQLite to VB), but not in the other
I thought SQLite would handle VB Unicode strings to UTF8 strings, but I
think you may be onto something there,
because if I move VB Unicode strings to SQLite I do sqlite3_bind_text16 and
I understand sqlite3_result_text is very
similar to sqlite3_bind_text. So, it makes sense I need
sqlite3_result_text16 instead.

Will do some further testing.

RBS




On Tue, Dec 15, 2015 at 12:22 AM, Igor Tandetnik <igor at tandetnik.org> wrote:

> On 12/14/2015 5:46 PM, Bart Smissaert wrote:
>
>> OK, thanks, will have to study this carefully.
>> So, if I understand you well then the way I do it now I would need
>> sqlite3_free?
>>
>
> First, I don't know how you do it now - you've never described that.
> Second, I have not ever said you needed sqlite3_free; nothing in your
> description of the problem so far suggests you need it.
>
>          'string not found, so return original field string
>>          '-------------------------------------------------
>> 140     If lPos = 0 Then
>> 150       sqlite3_result_value lPtr_ObjContext, lPtr1
>> 160       Exit Sub
>> 170     End If
>> 180     sqlite3_result_text lPtr_ObjContext, StrPtr(str), _
>>         (lPos - 2) * 2, SQLITE_TRANSIENT
>>
>
> To the extent I understand what's going on (I'm not really familiar with
> VB, so I'm taking and educated guess for the most part), the memory
> management part looks OK to me.
>
> However, I have doubts about encoding. Comments seem to suggest str points
> to a Unicode string; also the fact that you multiply lPos by 2. But
> sqlite3_result_text expects UTF-8 string. You are converting in one
> direction (SQLite to VB), but not in the other, as far as I can tell. I
> suspect you need sqlite3_result_text16 instead.
>
> Also lPos-2 looks wrong. Can't the substring be found at lPos == 1 ?
>
> --
> Igor Tandetnik
>
> _______________________________________________
> sqlite-users mailing list
> sqlite-users at mailinglists.sqlite.org
> http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users
>

Reply via email to