付録1-1 C言語

C言語を使用している場合のプログラム例は、次のとおりです。

/*ヘッダーファイルの指定*/

#include "svfrclient.h"
#include <stdio.h>

#define SVFRCLIENT_DLL "svfrclient.dll"
#define DEFAULT_HOST   "localhost"

HSVFRCLIENT (SVFRCLIENT_API *lpVrConnect)(char *host);
int (SVFRCLIENT_API *lpVrInit)(HSVFRCLIENT instance);
int (SVFRCLIENT_API *lpVrTest)(HSVFRCLIENT instance);
int (SVFRCLIENT_API *lpVrSetPrinter)(HSVFRCLIENT instance, char *printerName, char *portName);
int (SVFRCLIENT_API *lpVrSetSpoolFileName2)(HSVFRCLIENT instance, char *fileName);
int (SVFRCLIENT_API *lpVrSetForm)(HSVFRCLIENT instance, char *formName, int mode);
int (SVFRCLIENT_API *lpVrSetQuery)(HSVFRCLIENT instance, char *connectStr, char *queryName, int mode);
int (SVFRCLIENT_API *lpVrReport)(HSVFRCLIENT instance);
int (SVFRCLIENT_API *lpVrQuit)(HSVFRCLIENT instance);
int (SVFRCLIENT_API *lpVrDisconnect)(HSVFRCLIENT instance);

int main(int argc, char **argv)
{
   HSVFRCLIENT svf;
   char        host[256];
   HINSTANCE   hSvfrClient = (HINSTANCE)NULL;

   if (!(hSvfrClient = LoadLibrary(SVFRCLIENT_DLL))) {
      printf("[%s] Load Error!!\n", SVFRCLIENT_DLL);
      return 0;
   }
   (FARPROC)lpVrConnect = GetProcAddress(hSvfrClient, "VrConnect");
   (FARPROC)lpVrInit = GetProcAddress(hSvfrClient, "VrInit");
   (FARPROC)lpVrTest = GetProcAddress(hSvfrClient, "VrTest");
   (FARPROC)lpVrSetPrinter = GetProcAddress(hSvfrClient, "VrSetPrinter");
   (FARPROC)lpVrSetSpoolFileName2= GetProcAddress(hSvfrClient, "VrSetSpoolFileName2");
   (FARPROC)lpVrSetForm = GetProcAddress(hSvfrClient, "VrSetForm");
   (FARPROC)lpVrSetQuery = GetProcAddress(hSvfrClient, "VrSetQuery");
   (FARPROC)lpVrReport = GetProcAddress(hSvfrClient, "VrReport");
   (FARPROC)lpVrQuit = GetProcAddress(hSvfrClient, "VrQuit");
   (FARPROC)lpVrDisconnect = GetProcAddress(hSvfrClient, "VrDisconnect");

   if (argc < 2)
      strcpy(host, DEFAULT_HOST);
   else
      strcpy(host, argv[1]);

/*VrConnectを使用し指定されているHOSTとコネクトします*/
   if ((svf = lpVrConnect(host)) != NULL) {
      if (lpVrInit(svf) >= 0) {
         lpVrSetPrinter(svf, "PDF", "");
         lpVrSetSpoolFileName2(svf, "./sample.pdf");
         if (lpVrSetForm(svf, "sample.xml", 1) == 0) {
            if (lpVrTest(svf) == 0) {
            }
         }
         lpVrQuit(svf);
      }
/*VrDisConnectを使用しHOSTとのコネクトを解除します*/
      lpVrDisconnect(svf);
   }
   else {
      printf("VrConnect(\"%s\") failed!!\n", host);
   }

   FreeLibrary(hSvfrClient);
   hSvfrClient = (HINSTANCE)NULL;

   return 0;
}
参考

従来のSuper Visual Formade(C版)との違い

  • includeするヘッダーファイルがvfreport.hからsvfrclient.hへ変更されます。
  • 各種API関数を定義する必要があります。
  • VrConnect関数およびVrDisconnect関数を使用してコネクトの設定や解除を行います。
  • ハンドルがオブジェクトインスタンスに変更となります。
  • .NET版SVF実行部の場合は「SvfrServer.exe」を、Java版SVF実行部を使用している場合は「svf.jar」をあらかじめ起動しておく必要があります。