Hi,

I'm trying to get my first Windows DLL external to work.
It compiles successfully, but the externalFunctions and externalHandlers return empty. I set the 'externals' property, and re-open the stack afterwards.
I read in the DLL Article about how using the wrong compiler could mess things up. I'm currently using Bloodshed Dev C++, in which the code compiles without problems.
I also tried Microsoft Visual Studio, but externalFunctions/Handlers still return empty. Which compiler is recommended?


Here's the code:

#include "XCMDGlue.h"
 #include "windows.h" // GetComputerName(), SetComputerName()
 #include <iostream.h>
 #include <stdio.h>

void XCabort();
void XGetName(char *args[], int nargs, char **retstring, Bool *pass, Bool *error);
void XSetName(char *args[], int nargs, char **retstring, Bool *pass, Bool *error);


 char Xname[] = "Test External";

 void XCabort(){
 fprintf(stderr, "external abort");
 }

 Xternal Xtable[] = {
 {"xsetcomputername", XCOMMAND, 0, XSetName, XCabort},
 {"xgetcomputername", XFUNCTION, 0, XGetName, XCabort},
 {"", XNONE, 0, NULL, NULL}
 };

void XGetName(char *args[], int nargs, char **retstring, Bool *pass, Bool *error)
{
char buffer[MAX_COMPUTERNAME_LENGTH+1];
DWORD dwLength;
BOOL blnSuccess;


 dwLength = MAX_COMPUTERNAME_LENGTH+1;
 blnSuccess = GetComputerName(buffer, &dwLength);
 *pass = False; // don't pass the command up the chain
 if (blnSuccess)
 {
 *error = False; // call was successful
 //*retstring = istrdup (buffer);
 sprintf(*retstring,buffer);
 }
 else
 {
 *error = True; // call failed
 //*retstring = istrdup ("error: GetComputerName failed");
 sprintf(*retstring,"error: GetComputerName failed");
 }
 }



void XSetName(char *args[], int nargs, char **retstring, Bool *pass, Bool *error)
{
char buffer[MAX_COMPUTERNAME_LENGTH+1];
BOOL blnSuccess = False;


 // get the new name from the array of arguments
 if (1 == nargs)
 {
 blnSuccess = SetComputerName(args[0]);
 }

 *pass = False; // don't pass the command up the chain
 if (blnSuccess)
 {
 *error = False; // call was successful
 //*retstring = istrdup (buffer);
 sprintf(*retstring,buffer);
 }
 else
 {
 *error = True; // call failed
 //*retstring = istrdup ("error: SetComputerName failed");
 sprintf(*retstring,"error: SetComputerName failed");
 }
 }


Thanks!

Tomas Franz�n
Lighthead Software
http://www.lightheadsw.com/

I'm listening to The Hives - Walk Idiot Walk _______________________________________________
use-revolution mailing list
[EMAIL PROTECTED]
http://lists.runrev.com/mailman/listinfo/use-revolution

Reply via email to