De-Referencing A Pointer

Rory Starkweather starkweatherr at mchsi.com
Tue Mar 21 15:58:58 PST 2006


I'm totally lost now. The DLL version didn't like the wchar* types and 
it wouldn't compile. So I tried the command line version. It not only 
compiled, it worked perfectly. (Except for tht nasty and long forgotten 
0 based things.)

So I copied the command line version over the DLL version and I get:

e:\DigitalMars\DMD\Bin\..\..\dm\bin\link.exe dinstr,,,user32+kernel32/noi;

OPTLINK (R) for Win32  Release 7.50B1
Copyright (C) Digital Mars 1989 - 2001  All Rights Reserved

OPTLINK : Warning 23: No Stack
dinstr.obj(dinstr)
  Error 42: Symbol Undefined __nullext
dinstr.obj(dinstr)
  Error 42: Symbol Undefined __ModuleInfo_3std6string
OPTLINK : Warning 134: No Start Address
--- errorlevel 2

I can't see a difference between what is in DInStr.d now and the code 
below that was posted before any changes. The new version is posted 
below the >> version, which is from an earlier message at a time when it 
compiled OK, but didn't work.

>> ******************************* Here's the ** OLD *** D code:
>>
>> //--------DInStr.d-----------
>> import DLLMain;
>> import std.string;      // For find
>>
>> extern (Windows)
>> {
>> int findACharInString(char* searchString, char* searchChar)
>> {
>> int iPointer = 0;
>> char[] theChar;
>> char[] theString;
>>
>> theString = std.string.toString(searchString);
>> theChar = std.string.toString(searchChar);
>>
>> iPointer = find(theString, theChar);
>>
>> return (iPointer);
>> }
>> }

******************************* Here's the ** NEW *** D code:
//--------DInStr.d-----------
import DLLMain;
import std.string;      // For find

extern (Windows)
{
  int findACharInString(char* searchString, char* searchChar)
  {
     int iPointer = 0;
     char[] theChar;
     char[] theString;

     theString = std.string.toString(searchString);
     theChar = std.string.toString(searchChar);

     iPointer = find(theString, theChar);

    return (iPointer);
   }
}

As I said, I can't see the difference.

To confuse the issue even further, here's the commandline version, that 
works perfectly. I realize that I am passing char[] to findACharInString 
in this version but I don't see why it compiles without a hitch.

Command line used: DInstrCL Fred e

//--------DInStrCL.d-----------
import DLLMain;
import std.string;      // For find

extern (Windows)
{
  int findACharInString(char* searchString, char* searchChar)
  {
     int iPointer = 0;
     char[] theChar;
     char[] theString;

     theString = std.string.toString(searchString);
     theChar = std.string.toString(searchChar);

     iPointer = find(theString, theChar);

    return (iPointer);
   }
}

void main(char[][] Args)
{
     int iRetVal;

     iRetVal = findACharInString(Args[1], Args[2]);

     printf("%.*s found at %d\n", Args[2], iRetVal);
}



More information about the Digitalmars-d-learn mailing list