summaryrefslogtreecommitdiffstats
path: root/Tests/VSResource/main.cpp
blob: b2b5ac99c32c830e6d07c6a218d840079132abec (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#include <stdio.h>
#include <windows.h>

extern int lib();

struct x
{
  const char* txt;
};

int main(int argc, char** argv)
{
  int ret = 1;

  fprintf(stdout, "CTEST_FULL_OUTPUT (Avoid ctest truncation of output)\n");

#ifdef CMAKE_RCDEFINE
  fprintf(stdout, "CMAKE_RCDEFINE defined\n");
#endif

#ifdef CMAKE_RCDEFINE_NO_QUOTED_STRINGS
  // Expect CMAKE_RCDEFINE to preprocess to exactly test.txt
  x test;
  test.txt = "*exactly* test.txt";
  fprintf(stdout, "CMAKE_RCDEFINE_NO_QUOTED_STRINGS defined\n");
  fprintf(stdout, "CMAKE_RCDEFINE is %s, and is *not* a string constant\n",
          CMAKE_RCDEFINE);
#else
  // Expect CMAKE_RCDEFINE to be a string:
  fprintf(stdout, "CMAKE_RCDEFINE='%s', and is a string constant\n",
          CMAKE_RCDEFINE);
#endif

  HRSRC hello = ::FindResource(NULL, MAKEINTRESOURCE(1025), "TEXTFILE");
  if (hello) {
    fprintf(stdout, "FindResource worked\n");
    HGLOBAL hgbl = ::LoadResource(NULL, hello);
    int datasize = (int)::SizeofResource(NULL, hello);
    if (hgbl && datasize > 0) {
      fprintf(stdout, "LoadResource worked\n");
      fprintf(stdout, "SizeofResource returned datasize='%d'\n", datasize);
      void* data = ::LockResource(hgbl);
      if (data) {
        fprintf(stdout, "LockResource worked\n");
        char* str = (char*)malloc(datasize + 4);
        if (str) {
          memcpy(str, data, datasize);
          str[datasize] = 'E';
          str[datasize + 1] = 'O';
          str[datasize + 2] = 'R';
          str[datasize + 3] = 0;
          fprintf(stdout, "str='%s'\n", str);
          free(str);

          ret = 0;

#ifdef CMAKE_RCDEFINE_NO_QUOTED_STRINGS
          fprintf(stdout, "LoadString skipped\n");
#else
          char buf[256];
          if (::LoadString(NULL, 1026, buf, sizeof(buf)) > 0) {
            fprintf(stdout, "LoadString worked\n");
            fprintf(stdout, "buf='%s'\n", buf);
          } else {
            fprintf(stdout, "LoadString failed\n");
            ret = 1;
          }
#endif
        }
      }
    }
  }

  return ret + lib();
}