Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(110)

Side by Side Diff: Source/WebCore/platform/win/SoftLinking.h

Issue 13642009: WebCore: Remove PLATFORM(WIN) files we do not use. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 7 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 /*
2 * Copyright (C) 2007 Apple Inc. All rights reserved.
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
6 * are met:
7 *
8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright
11 * notice, this list of conditions and the following disclaimer in the
12 * documentation and/or other materials provided with the distribution.
13 * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of
14 * its contributors may be used to endorse or promote products derived
15 * from this software without specific prior written permission.
16 *
17 * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
18 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
19 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
20 * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
21 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
22 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
23 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
24 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 */
28
29 #ifndef SoftLinking_h
30 #define SoftLinking_h
31
32 #include <windows.h>
33 #include <wtf/Assertions.h>
34
35 #define SOFT_LINK_LIBRARY_HELPER(lib, suffix) \
36 static HMODULE lib##Library() \
37 { \
38 static HMODULE library = LoadLibraryW(L###lib suffix); \
39 return library; \
40 }
41
42 #if OS(WINCE)
43 #define SOFT_LINK_GETPROCADDRESS GetProcAddressA
44 #else
45 #define SOFT_LINK_GETPROCADDRESS GetProcAddress
46 #endif
47
48 #define SOFT_LINK_LIBRARY(lib) SOFT_LINK_LIBRARY_HELPER(lib, L".dll")
49 #define SOFT_LINK_DEBUG_LIBRARY(lib) SOFT_LINK_LIBRARY_HELPER(lib, L"_debug.dll" )
50
51 #define SOFT_LINK(library, functionName, resultType, callingConvention, paramete rDeclarations, parameterNames) \
52 static resultType callingConvention init##functionName parameterDeclarations ; \
53 static resultType (callingConvention*softLink##functionName) parameterDeclar ations = init##functionName; \
54 \
55 static resultType callingConvention init##functionName parameterDeclarations \
56 { \
57 softLink##functionName = reinterpret_cast<resultType (callingConvention* ) parameterDeclarations>(SOFT_LINK_GETPROCADDRESS(library##Library(), #functionN ame)); \
58 ASSERT(softLink##functionName); \
59 return softLink##functionName parameterNames; \
60 }\
61 \
62 inline resultType functionName parameterDeclarations \
63 {\
64 return softLink##functionName parameterNames; \
65 }
66
67 #define SOFT_LINK_OPTIONAL(library, functionName, resultType, callingConvention, parameterDeclarations) \
68 typedef resultType (callingConvention *functionName##PtrType) parameterDecla rations; \
69 static functionName##PtrType functionName##Ptr() \
70 { \
71 static functionName##PtrType ptr; \
72 static bool initialized; \
73 \
74 if (initialized) \
75 return ptr; \
76 initialized = true; \
77 \
78 ptr = reinterpret_cast<functionName##PtrType>(SOFT_LINK_GETPROCADDRESS(l ibrary##Library(), #functionName)); \
79 return ptr; \
80 }\
81
82 #define SOFT_LINK_LOADED_LIBRARY(library, functionName, resultType, callingConve ntion, parameterDeclarations) \
83 typedef resultType (callingConvention *functionName##PtrType) parameterDecla rations; \
84 static functionName##PtrType functionName##Ptr() \
85 { \
86 static functionName##PtrType ptr; \
87 static bool initialized; \
88 \
89 if (initialized) \
90 return ptr; \
91 initialized = true; \
92 \
93 static HINSTANCE libraryInstance = ::GetModuleHandle(L#library); \
94 \
95 ptr = reinterpret_cast<functionName##PtrType>(SOFT_LINK_GETPROCADDRESS(l ibraryInstance, #functionName)); \
96 return ptr; \
97 }\
98
99 /*
100 In order to soft link against functions decorated with __declspec(dllimport) , we prepend "softLink_" to the function names.
101 If you use SOFT_LINK_DLL_IMPORT(), you will also need to #define the functio n name to account for this, e.g.:
102
103 SOFT_LINK_DLL_IMPORT(myLibrary, myFunction, ...)
104 #define myFunction softLink_myFunction
105 */
106 #define SOFT_LINK_DLL_IMPORT(library, functionName, resultType, callingConventio n, parameterDeclarations, parameterNames) \
107 static resultType callingConvention init##functionName parameterDeclarations ; \
108 static resultType(callingConvention*softLink##functionName) parameterDeclara tions = init##functionName; \
109 \
110 static resultType callingConvention init##functionName parameterDeclarations \
111 { \
112 softLink##functionName = reinterpret_cast<resultType (callingConvention* )parameterDeclarations>(SOFT_LINK_GETPROCADDRESS(library##Library(), #functionNa me)); \
113 ASSERT(softLink##functionName); \
114 return softLink##functionName parameterNames; \
115 }\
116 \
117 inline resultType softLink_##functionName parameterDeclarations \
118 {\
119 return softLink##functionName parameterNames; \
120 }
121
122 #define SOFT_LINK_DLL_IMPORT_OPTIONAL(library, functionName, resultType, calling Convention, parameterDeclarations) \
123 typedef resultType (callingConvention *functionName##PtrType) parameterDecla rations; \
124 static functionName##PtrType functionName##Ptr() \
125 { \
126 static functionName##PtrType ptr; \
127 static bool initialized; \
128 \
129 if (initialized) \
130 return ptr; \
131 initialized = true; \
132 \
133 ptr = reinterpret_cast<resultType(callingConvention*)parameterDeclaratio ns>(SOFT_LINK_GETPROCADDRESS(library##Library(), #functionName)); \
134 return ptr; \
135 }\
136
137 #define SOFT_LINK_DLL_IMPORT_OPTIONAL(library, functionName, resultType, calling Convention, parameterDeclarations) \
138 typedef resultType (callingConvention *functionName##PtrType) parameterDecla rations; \
139 static functionName##PtrType functionName##Ptr() \
140 { \
141 static functionName##PtrType ptr; \
142 static bool initialized; \
143 \
144 if (initialized) \
145 return ptr; \
146 initialized = true; \
147 \
148 ptr = reinterpret_cast<resultType(callingConvention*)parameterDeclaratio ns>(SOFT_LINK_GETPROCADDRESS(library##Library(), #functionName)); \
149 return ptr; \
150 }\
151
152 /*
153 Variables exported by a DLL need to be accessed through a function.
154 If you use SOFT_LINK_VARIABLE_DLL_IMPORT(), you will also need to #define th e variable name to account for this, e.g.:
155
156 SOFT_LINK_VARIABLE_DLL_IMPORT(myLibrary, myVar, int)
157 #define myVar get_myVar()
158 */
159 #define SOFT_LINK_VARIABLE_DLL_IMPORT(library, variableName, variableType) \
160 static variableType get_##variableName() \
161 { \
162 static variableType* ptr = reinterpret_cast<variableType*>(SOFT_LINK_GET PROCADDRESS(library##Library(), #variableName)); \
163 ASSERT(ptr); \
164 return *ptr; \
165 }\
166
167 /*
168 Note that this will only work for variable types for which a return value of 0 can signal an error.
169 */
170 #define SOFT_LINK_VARIABLE_DLL_IMPORT_OPTIONAL(library, variableName, variableTy pe) \
171 static variableType get_##variableName() \
172 { \
173 static variableType* ptr = reinterpret_cast<variableType*>(SOFT_LINK_GET PROCADDRESS(library##Library(), #variableName)); \
174 if (!ptr) \
175 return 0; \
176 return *ptr; \
177 }\
178
179 #endif // SoftLinking_h
OLDNEW
« no previous file with comments | « Source/WebCore/platform/win/SharedTimerWin.cpp ('k') | Source/WebCore/platform/win/SoundWin.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698