diff options
author | Yun Peng <pcloudy@google.com> | 2016-06-30 14:27:38 +0000 |
---|---|---|
committer | Lukacs Berki <lberki@google.com> | 2016-07-01 07:08:30 +0000 |
commit | a93e9de9f5eaada1fe8ce8ecc1cebfd1614ed2b9 (patch) | |
tree | 1e0b1ec15488ac5b45042613d212e00d5eeeb821 /examples | |
parent | dd7bd50ad1f6cdddea218c704c933239e31ce7bf (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/BUILD | 15 | ||||
-rw-r--r-- | examples/windows/dll/hello-library.cpp | 23 | ||||
-rw-r--r-- | examples/windows/dll/hello-world.cpp | 30 |
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(<ime); + return ctime(<ime); +} + +__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; +} |