aboutsummaryrefslogtreecommitdiffhomepage
path: root/examples
diff options
context:
space:
mode:
authorGravatar Yun Peng <pcloudy@google.com>2016-06-30 14:27:38 +0000
committerGravatar Lukacs Berki <lberki@google.com>2016-07-01 07:08:30 +0000
commita93e9de9f5eaada1fe8ce8ecc1cebfd1614ed2b9 (patch)
tree1e0b1ec15488ac5b45042613d212e00d5eeeb821 /examples
parentdd7bd50ad1f6cdddea218c704c933239e31ce7bf (diff)
Added a dll hello world example program
run following commands to test it: bazel build --cpu=x64_windows_msvc examples/windows/dll:hello ./bazel-bin/examples/windows/dll/hello -- Change-Id: I096f6ff66473b1c9980b0aa36ec291f39512dd71 Reviewed-on: https://bazel-review.googlesource.com/#/c/3932 MOS_MIGRATED_REVID=126300284
Diffstat (limited to 'examples')
-rw-r--r--examples/windows/dll/BUILD15
-rw-r--r--examples/windows/dll/hello-library.cpp23
-rw-r--r--examples/windows/dll/hello-world.cpp30
3 files changed, 68 insertions, 0 deletions
diff --git a/examples/windows/dll/BUILD b/examples/windows/dll/BUILD
new file mode 100644
index 0000000000..2b7e956fc5
--- /dev/null
+++ b/examples/windows/dll/BUILD
@@ -0,0 +1,15 @@
+cc_binary(
+ name = "hellolib.dll",
+ srcs = [
+ "hello-library.cpp",
+ ],
+ linkshared = 1,
+)
+
+cc_binary(
+ name = "hello",
+ srcs = [
+ "hello-world.cpp",
+ ],
+ data = [":hellolib.dll"],
+)
diff --git a/examples/windows/dll/hello-library.cpp b/examples/windows/dll/hello-library.cpp
new file mode 100644
index 0000000000..4cfd7c9c0a
--- /dev/null
+++ b/examples/windows/dll/hello-library.cpp
@@ -0,0 +1,23 @@
+#include <stdio.h>
+#include <windows.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <time.h>
+
+__declspec(dllexport) char *get_time() {
+ time_t ltime;
+ time(&ltime);
+ return ctime(&ltime);
+}
+
+__declspec(dllexport) void say_hello(char *message) {
+ printf("Hello from dll!\n%s", message);
+}
+
+#ifdef __cplusplus
+}
+#endif
+
diff --git a/examples/windows/dll/hello-world.cpp b/examples/windows/dll/hello-world.cpp
new file mode 100644
index 0000000000..7483e9f070
--- /dev/null
+++ b/examples/windows/dll/hello-world.cpp
@@ -0,0 +1,30 @@
+#include <stdio.h>
+#include <windows.h>
+typedef char *(__cdecl *GET_TIME_PTR)();
+typedef void(__cdecl *SAY_HELLO_PTR)(char *);
+
+int main() {
+ HINSTANCE hellolib;
+ GET_TIME_PTR get_time;
+ SAY_HELLO_PTR say_hello;
+
+ bool success = FALSE;
+
+ hellolib = LoadLibrary(TEXT("hellolib.dll"));
+
+ if (hellolib != NULL) {
+ get_time = (GET_TIME_PTR)GetProcAddress(hellolib, "get_time");
+ say_hello = (SAY_HELLO_PTR)GetProcAddress(hellolib, "say_hello");
+
+ if (NULL != get_time && NULL != say_hello) {
+ success = TRUE;
+ char *now = get_time();
+ say_hello(now);
+ }
+ FreeLibrary(hellolib);
+ }
+
+ if (!success) printf("Failed to load dll and call functions\n");
+
+ return 0;
+}