#include <stdio.h>
#import "c:\smartware\bin\sw.tlb"
#define STRCONVERT_MAXLEN 300

struct StartOle {
    StartOle() { CoInitialize(NULL); }
    ~StartOle() { CoUninitialize(); }
} _inst_StartOle;

char* ConvertToAnsi(OLECHAR FAR* szW)
{
  static char achA[STRCONVERT_MAXLEN]; 
  
  WideCharToMultiByte(CP_ACP, 0, szW, -1, achA, STRCONVERT_MAXLEN, NULL, NULL);  
  return achA; 
} 

OLECHAR* ConvertToUnicode(char FAR* szA)
{
  static OLECHAR achW[STRCONVERT_MAXLEN]; 

  MultiByteToWideChar(CP_ACP, 0, szA, -1, achW, STRCONVERT_MAXLEN);  
  return achW; 
}

void main(int argc, char *argv[])
{
	using namespace SmartWare;
	IApplicationPtr pSW;
	BSTR command;
	BSTR keys;
	BSTR ret;

    pSW.CreateInstance(L"SmartWare.Application");
	//pSW->Visible = VARIANT_TRUE;

	if (argc > 1)
	{
		command = SysAllocString(ConvertToUnicode(argv[1]));
		keys = SysAllocString(L"");

		ret = pSW->Execute(&command, &keys);

		printf(ConvertToAnsi(ret));

		SysFreeString(command);
		SysFreeString(keys);
		SysFreeString(ret);
	}


}