De-Referencing A Pointer
NoBoDy
NoBoDy_member at pathlink.com
Tue Mar 21 08:21:19 PST 2006
VB6 internally stores strings in UNICODE.
When calling external functions VB6 uses stub to convert string to/from ANSI
format.
If you want to pass string from VB in Unicode use declaration like this:
Declare Function findChar Lib "..." (ByVal t As LONG) As Long
and call that function as:
retValue = findChar(StrPtr("Some string"))
this will pass pointer to UNICODE string to externall function findChar
In article <dvp71g$hv1$1 at digitaldaemon.com>, James Dunne says...
>
>Rory Starkweather wrote:
>>>void foo(dchar c) {}
>>>void main()
>>>{
>>> foo('a');
>>>}
>>>
>>>so you'll probably have no trouble there. :)
>>>
>>
>>
>>
>> Thanks for the help. I'm still not sure how to get VB to send a dchar, but there
>> are only a couple of possibilities. Unless you are suggesting that I pass it to
>> D as a string and then use a conversion function on it.
>>
>>
>
>Actually you want to use wchar* at the D end from VB. VB sends
>'Unicode' strings where each character is represented by two bytes.
>This is the equivalent of a wchar* in D. char, wchar, and dchar in D
>are all more-or-less interchangeable. The best way to get VB and D to
>do string work together is this:
>
>Declare Function findChar Lib "..." (ByVal t As String) As Long
>
>export extern (Windows) int findChar(wchar* str) {
> ...
>}
>
>I'm not 100% sure if this works as I've had serious issues with VB6's
>string handling in the past (especially in scenarios like this). I
>think the trick is to initialize the string from VB's side and pass it
>in to C/C++/D for them to modify it. I'll do some more research on this
>and get you a better answer if I can.
>
>--
>-----BEGIN GEEK CODE BLOCK-----
>Version: 3.1
>GCS/MU/S d-pu s:+ a-->? C++++$ UL+++ P--- L+++ !E W-- N++ o? K? w--- O
>M--@ V? PS PE Y+ PGP- t+ 5 X+ !R tv-->!tv b- DI++(+) D++ G e++>e
>h>--->++ r+++ y+++
>------END GEEK CODE BLOCK------
>
>James Dunne
More information about the Digitalmars-d-learn
mailing list