Disclaimer: I'm working for this company.
Hi. You can try to use "RTF to HTML DLL .Net" for this. Library supports rtf to html converting and doesn't require installed ms office or any other word-processor. Full version for the 1 Developer and 1 Server License costs $239(US) now. Or you can try to use the trial version. The trial version is complete functional and differs from full only that:

1/Converts only first 30,000 symbols
2/Can be used only for evaluating and testing

Sample code for the rtf to html converting in C++:

RTF-to-HTML DLL Win32 - имя бесплатной библиотеки

Code:
#include <windows.h>
#include <stdlib.h>
#include <stdio.h>

struct convertOptions
{
	int  htmlType;			 //0-XHTML, 1- HTML, 2-HTML+CSS
	char title[120];		 //Page title	
	char extension[10];		 //for example, ".html"
	char fontFace[50];		 //for example, "Arial" or "Times New Roman"
	char fontSize[10];		 //for example ,"10"
	int  preserveImages;	 //0-no, 1 - yes 
	int  preserveFontFace;	 //0-no, 1 - yes 
	int  preserveFontSize;	 //0-no, 1 - yes 
	int  preserveFontColor;	 //0-no, 1 - yes 
	int  preserveHyperlinks;	//0-no, 1 - yes
	int  tableBorders;		 //0-invisble, 1 - visible
	int  encoding;			 /* Windows_1250=0, Windows_1251=1, Windows_1252=2, Windows_1253=3,
								Windows_1254=4, Windows_1255=5, Windows_1256=6, Windows_1257=7,
								Windows_1258=8, ISO_8859_1=9,	ISO_8859_2=10,	ISO_8859_3=11,
								ISO_8859_4=12,	ISO_8859_5=13,	ISO_8859_6=14,	ISO_8859_7=15,
								ISO_8859_8=16,	ISO_8859_9=17,	KOI8_R=18,		UTF_8=19	*/
	int  htmlParts;			 //0-html Complete, 1 - only between <body>..</body>
	char imageFolder[500];	 //folder where image will be stored
	char cssStyleName[120];	 //style name, for example "ts"
	int  fontSizesType;		 //0-normal sizes, 1 - medium sizes, 2 - big sizes, 3 - huge sizes
	char imageSubfolder[120];//will create subfolder for storing images, if ""-empty string then images will be strored in 'image_folder' 
	int  hyperlinkTarget;	 //0 - no target, 1 - target="_blank",  2 - _self, 3 - _parent, 4 - _top
	int  cssStartNumber;	 //number for style name, like a .tsN (.ts1 or .ts100)
	char Serial[12];
};



typedef int (* cfunc)(char * rtffile, char *outfolder, struct convertOptions);
cfunc ConvertFile;


int main() 
{	

	int ret;
	char rtffile[_MAX_PATH];
	char outfolder[_MAX_PATH];

	//load library
	HINSTANCE hMod=LoadLibrary("Sautinsoft.RTFToHTML.Win32.dll");

	if(hMod==NULL) 
	{
	  printf("Unable to load library\n");
	  getchar();
	  return 0;
	}
	ConvertFile=(cfunc)GetProcAddress(hMod,"ConvertFile");
	if (ConvertFile==NULL)
	{
		printf("Can't load function.\n");
		FreeLibrary((HMODULE)hMod);
		getchar();
		return 0;
	}
	//
	printf("Please enter rtf file (example: d:\\my.rtf):\n");
	gets(rtffile);
	printf("Please enter output folder (example : d:\\temp):\n");
	gets(outfolder);

	//set conversion params
	struct convertOptions ct;
	ct.cssStartNumber=1;
	strcpy(ct.cssStyleName,"ts");
	ct.encoding=9;
	strcpy(ct.extension,".htm");
	strcpy(ct.fontFace,"Verdana");
	strcpy(ct.fontSize,"10");
	ct.htmlType=1;
	ct.preserveFontColor=1;
	ct.preserveFontFace=1;
	ct.preserveFontSize=1;
	ct.preserveImages=1;
	ct.preserveHyperlinks=1;
	ct.tableBorders=1;
	ct.htmlParts=0; //only between <body>...</body>	
	strcpy(ct.title,"My Page");
	strcpy(ct.imageFolder,"D:\\");
	strcpy(ct.imageSubfolder,"test.files");
	ct.hyperlinkTarget=0;
	strcpy(ct.Serial,"Serial number");

	
	ret=ConvertFile(rtffile,outfolder,ct);

	switch(ret)
	{		
		case -1 : puts("Check your serial number");break;
		case 0 : puts("Conversion completed");break;
		case 2 : puts("Not enough memory"); break;
		case 3 : puts("Can't open output file"); break;
		case 4 : puts("Can't open input file"); break;
		case 5 : puts("The input file has zerow length"); break;
		default: break;
	}
	//flushall
	getchar();
	FreeLibrary((HMODULE)hMod);
	return 0;
}