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