comdlg32: Fix some alignment issues in the Dutch translation.
[wine/hramrach.git] / dlls / oledb32 / tests / convert.c
blob9cece28a8caf161db081064ccbaeb4455eb09b80
1 /* OLE DB Conversion library tests
3 * Copyright 2009 Huw Davies
5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Lesser General Public
7 * License as published by the Free Software Foundation; either
8 * version 2.1 of the License, or (at your option) any later version.
10 * This library is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * Lesser General Public License for more details.
15 * You should have received a copy of the GNU Lesser General Public
16 * License along with this library; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
20 #include <stdarg.h>
22 #define COBJMACROS
23 #define NONAMELESSUNION
24 #define NONAMELESSSTRUCT
26 #include "windef.h"
27 #include "winbase.h"
28 #include "ole2.h"
29 #include "msdadc.h"
31 #include "oledberr.h"
33 #include "initguid.h"
34 #include "msdaguid.h"
36 #include "wine/test.h"
38 DEFINE_GUID(GUID_NULL,0,0,0,0,0,0,0,0,0,0,0);
40 static void test_dcinfo(void)
42 IDCInfo *info;
43 HRESULT hr;
44 DCINFOTYPE types[2];
45 DCINFO *inf;
47 hr = CoCreateInstance(&CLSID_OLEDB_CONVERSIONLIBRARY, NULL, CLSCTX_INPROC_SERVER, &IID_IDCInfo, (void**)&info);
48 if(FAILED(hr))
50 win_skip("Unable to load oledb conversion library\n");
51 return;
54 types[0] = DCINFOTYPE_VERSION;
55 hr = IDCInfo_GetInfo(info, 1, types, &inf);
56 ok(hr == S_OK, "got %08x\n", hr);
58 ok(inf->eInfoType == DCINFOTYPE_VERSION, "got %08x\n", inf->eInfoType);
59 ok(V_VT(&inf->vData) == VT_UI4, "got %08x\n", V_VT(&inf->vData));
60 ok(V_UI4(&inf->vData) == 0x110, "got %08x\n", V_UI4(&inf->vData));
62 V_UI4(&inf->vData) = 0x200;
63 hr = IDCInfo_SetInfo(info, 1, inf);
64 ok(hr == S_OK, "got %08x\n", hr);
65 CoTaskMemFree(inf);
67 hr = IDCInfo_GetInfo(info, 1, types, &inf);
68 ok(hr == S_OK, "got %08x\n", hr);
69 ok(inf->eInfoType == DCINFOTYPE_VERSION, "got %08x\n", inf->eInfoType);
70 ok(V_VT(&inf->vData) == VT_UI4, "got %08x\n", V_VT(&inf->vData));
71 ok(V_UI4(&inf->vData) == 0x200, "got %08x\n", V_UI4(&inf->vData));
73 V_UI4(&inf->vData) = 0x100;
74 hr = IDCInfo_SetInfo(info, 1, inf);
75 ok(hr == S_OK, "got %08x\n", hr);
76 CoTaskMemFree(inf);
78 hr = IDCInfo_GetInfo(info, 1, types, &inf);
79 ok(hr == S_OK, "got %08x\n", hr);
80 ok(inf->eInfoType == DCINFOTYPE_VERSION, "got %08x\n", inf->eInfoType);
81 ok(V_VT(&inf->vData) == VT_UI4, "got %08x\n", V_VT(&inf->vData));
82 ok(V_UI4(&inf->vData) == 0x100, "got %08x\n", V_UI4(&inf->vData));
84 V_UI4(&inf->vData) = 0x500;
85 hr = IDCInfo_SetInfo(info, 1, inf);
86 ok(hr == S_OK, "got %08x\n", hr);
87 CoTaskMemFree(inf);
89 hr = IDCInfo_GetInfo(info, 1, types, &inf);
90 ok(hr == S_OK, "got %08x\n", hr);
91 ok(inf->eInfoType == DCINFOTYPE_VERSION, "got %08x\n", inf->eInfoType);
92 ok(V_VT(&inf->vData) == VT_UI4, "got %08x\n", V_VT(&inf->vData));
93 ok(V_UI4(&inf->vData) == 0x500, "got %08x\n", V_UI4(&inf->vData));
95 V_UI4(&inf->vData) = 0xffff;
96 hr = IDCInfo_SetInfo(info, 1, inf);
97 ok(hr == S_OK, "got %08x\n", hr);
98 CoTaskMemFree(inf);
100 hr = IDCInfo_GetInfo(info, 1, types, &inf);
101 ok(hr == S_OK, "got %08x\n", hr);
102 ok(inf->eInfoType == DCINFOTYPE_VERSION, "got %08x\n", inf->eInfoType);
103 ok(V_VT(&inf->vData) == VT_UI4, "got %08x\n", V_VT(&inf->vData));
104 ok(V_UI4(&inf->vData) == 0xffff, "got %08x\n", V_UI4(&inf->vData));
106 V_UI4(&inf->vData) = 0x12345678;
107 hr = IDCInfo_SetInfo(info, 1, inf);
108 ok(hr == S_OK, "got %08x\n", hr);
109 CoTaskMemFree(inf);
111 hr = IDCInfo_GetInfo(info, 1, types, &inf);
112 ok(hr == S_OK, "got %08x\n", hr);
113 ok(inf->eInfoType == DCINFOTYPE_VERSION, "got %08x\n", inf->eInfoType);
114 ok(V_VT(&inf->vData) == VT_UI4, "got %08x\n", V_VT(&inf->vData));
115 ok(V_UI4(&inf->vData) == 0x12345678, "got %08x\n", V_UI4(&inf->vData));
117 /* Try setting a version variant of something other than VT_UI4 */
118 V_VT(&inf->vData) = VT_I4;
119 V_I4(&inf->vData) = 0x200;
120 hr = IDCInfo_SetInfo(info, 1, inf);
121 ok(hr == DB_S_ERRORSOCCURRED, "got %08x\n", hr);
122 CoTaskMemFree(inf);
124 hr = IDCInfo_GetInfo(info, 1, types, &inf);
125 ok(hr == S_OK, "got %08x\n", hr);
126 ok(inf->eInfoType == DCINFOTYPE_VERSION, "got %08x\n", inf->eInfoType);
127 ok(V_VT(&inf->vData) == VT_UI4, "got %08x\n", V_VT(&inf->vData));
128 ok(V_UI4(&inf->vData) == 0x12345678, "got %08x\n", V_UI4(&inf->vData));
129 CoTaskMemFree(inf);
131 /* More than one type */
132 types[1] = 2;
133 hr = IDCInfo_GetInfo(info, 2, types, &inf);
134 ok(hr == S_OK, "got %08x\n", hr);
135 ok(inf[0].eInfoType == DCINFOTYPE_VERSION, "got %08x\n", inf[0].eInfoType);
136 ok(V_VT(&inf[0].vData) == VT_UI4, "got %08x\n", V_VT(&inf[0].vData));
137 ok(V_UI4(&inf[0].vData) == 0x12345678, "got %08x\n", V_UI4(&inf[0].vData));
138 ok(inf[1].eInfoType == 2, "got %08x\n", inf[1].eInfoType);
139 ok(V_VT(&inf[1].vData) == VT_EMPTY, "got %08x\n", V_VT(&inf[1].vData));
141 hr = IDCInfo_SetInfo(info, 2, inf);
142 ok(hr == S_OK, "got %08x\n", hr);
143 CoTaskMemFree(inf);
146 IDCInfo_Release(info);
149 struct can_convert
151 DBTYPE type;
152 DWORD can_convert_to;
153 } simple_convert[] =
155 {DBTYPE_EMPTY, 0x63bfd9ff},
156 {DBTYPE_NULL, 0x40001002},
157 {DBTYPE_I2, 0x3b9fd9ff},
158 {DBTYPE_I4, 0x3bdfd9ff},
160 {DBTYPE_R4, 0x3b9fd9ff},
161 {DBTYPE_R8, 0x3b9fd9ff},
162 {DBTYPE_CY, 0x039fd97f},
163 {DBTYPE_DATE, 0x799f99bf},
165 {DBTYPE_BSTR, 0x7bffd9ff},
166 {DBTYPE_IDISPATCH, 0x7bffffff},
167 {DBTYPE_ERROR, 0x01001500},
168 {DBTYPE_BOOL, 0x039fd9ff},
170 {DBTYPE_VARIANT, 0x7bffffff},
171 {DBTYPE_IUNKNOWN, 0x00003203},
172 {DBTYPE_DECIMAL, 0x3b9fd97f},
173 {DBTYPE_I1, 0x3b9fd9ff},
175 {DBTYPE_UI1, 0x3b9fd9ff},
176 {DBTYPE_UI2, 0x3b9fd9ff},
177 {DBTYPE_UI4, 0x3bdfd9ff},
178 {DBTYPE_I8, 0x43dfd97f},
180 {DBTYPE_UI8, 0x43dfd97f},
181 {DBTYPE_GUID, 0x01e01103},
182 {DBTYPE_BYTES, 0x01fc110b},
183 {DBTYPE_STR, 0x7bffd9ff},
185 {DBTYPE_WSTR, 0x7bffd9ff},
186 {DBTYPE_NUMERIC, 0x039fd97f},
187 {DBTYPE_UDT, 0x00000000},
188 {DBTYPE_DBDATE, 0x79801183},
190 {DBTYPE_DBTIME, 0x79801183},
191 {DBTYPE_DBTIMESTAMP, 0x79801183},
192 {DBTYPE_FILETIME, 0x79981183}
196 static inline BOOL array_type(DBTYPE type)
198 return (type >= DBTYPE_I2 && type <= DBTYPE_UI4);
201 static void test_canconvert(void)
203 IDataConvert *convert;
204 HRESULT hr;
205 int src_idx, dst_idx;
207 hr = CoCreateInstance(&CLSID_OLEDB_CONVERSIONLIBRARY, NULL, CLSCTX_INPROC_SERVER, &IID_IDataConvert, (void**)&convert);
208 if(FAILED(hr))
210 win_skip("Unable to load oledb conversion library\n");
211 return;
214 /* Some older versions of the library don't support several conversions, we'll skip
215 if we have such a library */
216 hr = IDataConvert_CanConvert(convert, DBTYPE_EMPTY, DBTYPE_DBTIMESTAMP);
217 if(hr == S_FALSE)
219 win_skip("Doesn't handle DBTYPE_EMPTY -> DBTYPE_DBTIMESTAMP conversion so skipping\n");
220 IDataConvert_Release(convert);
221 return;
224 /* Some older versions of the library don't support several conversions, we'll skip
225 if we have such a library */
226 hr = IDataConvert_CanConvert(convert, DBTYPE_EMPTY, DBTYPE_DBTIMESTAMP);
227 if(hr == S_FALSE)
229 win_skip("Doesn't handle DBTYPE_EMPTY -> DBTYPE_DBTIMESTAMP conversion so skipping\n");
230 IDataConvert_Release(convert);
231 return;
234 for(src_idx = 0; src_idx < sizeof(simple_convert) / sizeof(simple_convert[0]); src_idx++)
235 for(dst_idx = 0; dst_idx < sizeof(simple_convert) / sizeof(simple_convert[0]); dst_idx++)
237 BOOL expect, simple_expect;
238 simple_expect = (simple_convert[src_idx].can_convert_to >> dst_idx) & 1;
240 hr = IDataConvert_CanConvert(convert, simple_convert[src_idx].type, simple_convert[dst_idx].type);
241 expect = simple_expect;
242 ok((hr == S_OK && expect == TRUE) ||
243 (hr == S_FALSE && expect == FALSE),
244 "%04x -> %04x: got %08x expect conversion to be %spossible\n", simple_convert[src_idx].type,
245 simple_convert[dst_idx].type, hr, expect ? "" : "not ");
247 /* src DBTYPE_BYREF */
248 hr = IDataConvert_CanConvert(convert, simple_convert[src_idx].type | DBTYPE_BYREF, simple_convert[dst_idx].type);
249 expect = simple_expect;
250 ok((hr == S_OK && expect == TRUE) ||
251 (hr == S_FALSE && expect == FALSE),
252 "%04x -> %04x: got %08x expect conversion to be %spossible\n", simple_convert[src_idx].type | DBTYPE_BYREF,
253 simple_convert[dst_idx].type, hr, expect ? "" : "not ");
255 /* dst DBTYPE_BYREF */
256 hr = IDataConvert_CanConvert(convert, simple_convert[src_idx].type, simple_convert[dst_idx].type | DBTYPE_BYREF);
257 expect = FALSE;
258 if(simple_expect &&
259 (simple_convert[dst_idx].type == DBTYPE_BYTES ||
260 simple_convert[dst_idx].type == DBTYPE_STR ||
261 simple_convert[dst_idx].type == DBTYPE_WSTR))
262 expect = TRUE;
263 ok((hr == S_OK && expect == TRUE) ||
264 (hr == S_FALSE && expect == FALSE),
265 "%04x -> %04x: got %08x expect conversion to be %spossible\n", simple_convert[src_idx].type,
266 simple_convert[dst_idx].type | DBTYPE_BYREF, hr, expect ? "" : "not ");
268 /* src & dst DBTYPE_BYREF */
269 hr = IDataConvert_CanConvert(convert, simple_convert[src_idx].type | DBTYPE_BYREF, simple_convert[dst_idx].type | DBTYPE_BYREF);
270 expect = FALSE;
271 if(simple_expect &&
272 (simple_convert[dst_idx].type == DBTYPE_BYTES ||
273 simple_convert[dst_idx].type == DBTYPE_STR ||
274 simple_convert[dst_idx].type == DBTYPE_WSTR))
275 expect = TRUE;
276 ok((hr == S_OK && expect == TRUE) ||
277 (hr == S_FALSE && expect == FALSE),
278 "%04x -> %04x: got %08x expect conversion to be %spossible\n", simple_convert[src_idx].type | DBTYPE_BYREF,
279 simple_convert[dst_idx].type | DBTYPE_BYREF, hr, expect ? "" : "not ");
281 /* src DBTYPE_ARRAY */
282 hr = IDataConvert_CanConvert(convert, simple_convert[src_idx].type | DBTYPE_ARRAY, simple_convert[dst_idx].type);
283 expect = FALSE;
284 if(array_type(simple_convert[src_idx].type) && simple_convert[dst_idx].type == DBTYPE_VARIANT)
285 expect = TRUE;
286 ok((hr == S_OK && expect == TRUE) ||
287 (hr == S_FALSE && expect == FALSE),
288 "%04x -> %04x: got %08x expect conversion to be %spossible\n", simple_convert[src_idx].type | DBTYPE_ARRAY,
289 simple_convert[dst_idx].type, hr, expect ? "" : "not ");
291 /* dst DBTYPE_ARRAY */
292 hr = IDataConvert_CanConvert(convert, simple_convert[src_idx].type, simple_convert[dst_idx].type | DBTYPE_ARRAY);
293 expect = FALSE;
294 if(array_type(simple_convert[dst_idx].type) &&
295 (simple_convert[src_idx].type == DBTYPE_IDISPATCH ||
296 simple_convert[src_idx].type == DBTYPE_VARIANT))
297 expect = TRUE;
298 ok((hr == S_OK && expect == TRUE) ||
299 (hr == S_FALSE && expect == FALSE),
300 "%04x -> %04x: got %08x expect conversion to be %spossible\n", simple_convert[src_idx].type,
301 simple_convert[dst_idx].type | DBTYPE_ARRAY, hr, expect ? "" : "not ");
303 /* src & dst DBTYPE_ARRAY */
304 hr = IDataConvert_CanConvert(convert, simple_convert[src_idx].type | DBTYPE_ARRAY, simple_convert[dst_idx].type | DBTYPE_ARRAY);
305 expect = FALSE;
306 if(array_type(simple_convert[src_idx].type) &&
307 simple_convert[src_idx].type == simple_convert[dst_idx].type)
308 expect = TRUE;
309 ok((hr == S_OK && expect == TRUE) ||
310 (hr == S_FALSE && expect == FALSE),
311 "%04x -> %04x: got %08x expect conversion to be %spossible\n", simple_convert[src_idx].type | DBTYPE_ARRAY,
312 simple_convert[dst_idx].type | DBTYPE_ARRAY, hr, expect ? "" : "not ");
314 /* src DBTYPE_VECTOR */
315 hr = IDataConvert_CanConvert(convert, simple_convert[src_idx].type | DBTYPE_VECTOR, simple_convert[dst_idx].type);
316 expect = FALSE;
317 ok((hr == S_OK && expect == TRUE) ||
318 (hr == S_FALSE && expect == FALSE),
319 "%04x -> %04x: got %08x expect conversion to be %spossible\n", simple_convert[src_idx].type | DBTYPE_VECTOR,
320 simple_convert[dst_idx].type, hr, expect ? "" : "not ");
322 /* dst DBTYPE_VECTOR */
323 hr = IDataConvert_CanConvert(convert, simple_convert[src_idx].type, simple_convert[dst_idx].type | DBTYPE_VECTOR);
324 expect = FALSE;
325 ok((hr == S_OK && expect == TRUE) ||
326 (hr == S_FALSE && expect == FALSE),
327 "%04x -> %04x: got %08x expect conversion to be %spossible\n", simple_convert[src_idx].type,
328 simple_convert[dst_idx].type | DBTYPE_VECTOR, hr, expect ? "" : "not ");
330 /* src & dst DBTYPE_VECTOR */
331 hr = IDataConvert_CanConvert(convert, simple_convert[src_idx].type | DBTYPE_VECTOR, simple_convert[dst_idx].type | DBTYPE_VECTOR);
332 expect = FALSE;
333 ok((hr == S_OK && expect == TRUE) ||
334 (hr == S_FALSE && expect == FALSE),
335 "%04x -> %04x: got %08x expect conversion to be %spossible\n", simple_convert[src_idx].type | DBTYPE_VECTOR,
336 simple_convert[dst_idx].type | DBTYPE_VECTOR, hr, expect ? "" : "not ");
341 IDataConvert_Release(convert);
344 static void test_converttoi2(void)
346 IDataConvert *convert;
347 HRESULT hr;
348 signed short dst;
349 BYTE src[20];
350 DBSTATUS dst_status;
351 DBLENGTH dst_len;
352 static const WCHAR ten[] = {'1','0',0};
353 BSTR b;
355 hr = CoCreateInstance(&CLSID_OLEDB_CONVERSIONLIBRARY, NULL, CLSCTX_INPROC_SERVER, &IID_IDataConvert, (void**)&convert);
356 if(FAILED(hr))
358 win_skip("Unable to load oledb conversion library\n");
359 return;
362 dst = 0x1234;
363 hr = IDataConvert_DataConvert(convert, DBTYPE_EMPTY, DBTYPE_I2, 0, &dst_len, src, &dst, sizeof(dst), 0, &dst_status, 0, 0, 0);
364 ok(hr == S_OK, "got %08x\n", hr);
365 ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
366 ok(dst_len == sizeof(dst), "got %d\n", dst_len);
367 ok(dst == 0, "got %08x\n", dst);
369 dst = 0x1234;
370 hr = IDataConvert_DataConvert(convert, DBTYPE_NULL, DBTYPE_I2, 0, &dst_len, src, &dst, sizeof(dst), 0, &dst_status, 0, 0, 0);
371 ok(hr == DB_E_UNSUPPORTEDCONVERSION, "got %08x\n", hr);
372 ok(dst_status == DBSTATUS_E_BADACCESSOR, "got %08x\n", dst_status);
373 ok(dst_len == sizeof(dst), "got %d\n", dst_len);
374 ok(dst == 0x1234, "got %08x\n", dst);
376 dst = 0x1234;
377 *(short *)src = 0x4321;
378 hr = IDataConvert_DataConvert(convert, DBTYPE_I2, DBTYPE_I2, 0, &dst_len, src, &dst, sizeof(dst), 0, &dst_status, 0, 0, 0);
379 ok(hr == S_OK, "got %08x\n", hr);
380 ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
381 ok(dst_len == sizeof(dst), "got %d\n", dst_len);
382 ok(dst == 0x4321, "got %08x\n", dst);
384 dst = 0x1234;
385 *(int *)src = 0x4321cafe;
386 hr = IDataConvert_DataConvert(convert, DBTYPE_I4, DBTYPE_I2, 0, &dst_len, src, &dst, sizeof(dst), 0, &dst_status, 0, 0, 0);
387 todo_wine
388 ok(hr == DB_E_DATAOVERFLOW, "got %08x\n", hr);
389 ok(dst_status == DBSTATUS_E_DATAOVERFLOW, "got %08x\n", dst_status);
390 ok(dst_len == sizeof(dst), "got %d\n", dst_len);
391 ok(dst == 0x1234, "got %08x\n", dst);
393 dst = 0x1234;
394 *(int *)src = 0x4321;
395 hr = IDataConvert_DataConvert(convert, DBTYPE_I4, DBTYPE_I2, 0, &dst_len, src, &dst, sizeof(dst), 0, &dst_status, 0, 0, 0);
396 ok(hr == S_OK, "got %08x\n", hr);
397 ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
398 ok(dst_len == sizeof(dst), "got %d\n", dst_len);
399 ok(dst == 0x4321, "got %08x\n", dst);
401 dst = 0x1234;
402 *(FLOAT *)src = 10.75;
403 hr = IDataConvert_DataConvert(convert, DBTYPE_R4, DBTYPE_I2, 0, &dst_len, src, &dst, sizeof(dst), 0, &dst_status, 0, 0, 0);
404 ok(hr == S_OK, "got %08x\n", hr);
405 ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
406 ok(dst_len == sizeof(dst), "got %d\n", dst_len);
407 ok(dst == 11, "got %08x\n", dst);
409 dst = 0x1234;
410 *(FLOAT *)src = -10.75;
411 hr = IDataConvert_DataConvert(convert, DBTYPE_R4, DBTYPE_I2, 0, &dst_len, src, &dst, sizeof(dst), 0, &dst_status, 0, 0, 0);
412 ok(hr == S_OK, "got %08x\n", hr);
413 ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
414 ok(dst_len == sizeof(dst), "got %d\n", dst_len);
415 ok(dst == -11, "got %08x\n", dst);
417 dst = 0x1234;
418 *(double *)src = 10.75;
419 hr = IDataConvert_DataConvert(convert, DBTYPE_R8, DBTYPE_I2, 0, &dst_len, src, &dst, sizeof(dst), 0, &dst_status, 0, 0, 0);
420 ok(hr == S_OK, "got %08x\n", hr);
421 ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
422 ok(dst_len == sizeof(dst), "got %d\n", dst_len);
423 ok(dst == 11, "got %08x\n", dst);
425 dst = 0x1234;
426 ((LARGE_INTEGER *)src)->QuadPart = 107500;
427 hr = IDataConvert_DataConvert(convert, DBTYPE_CY, DBTYPE_I2, 0, &dst_len, src, &dst, sizeof(dst), 0, &dst_status, 0, 0, 0);
428 ok(hr == S_OK, "got %08x\n", hr);
429 ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
430 ok(dst_len == sizeof(dst), "got %d\n", dst_len);
431 ok(dst == 11, "got %08x\n", dst);
433 dst = 0x1234;
434 *(DATE *)src = 10.7500;
435 hr = IDataConvert_DataConvert(convert, DBTYPE_DATE, DBTYPE_I2, 0, &dst_len, src, &dst, sizeof(dst), 0, &dst_status, 0, 0, 0);
436 ok(hr == S_OK, "got %08x\n", hr);
437 ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
438 ok(dst_len == sizeof(dst), "got %d\n", dst_len);
439 ok(dst == 11, "got %08x\n", dst);
441 dst = 0x1234;
442 b = SysAllocString(ten);
443 *(BSTR *)src = b;
444 hr = IDataConvert_DataConvert(convert, DBTYPE_BSTR, DBTYPE_I2, 0, &dst_len, src, &dst, sizeof(dst), 0, &dst_status, 0, 0, 0);
445 ok(hr == S_OK, "got %08x\n", hr);
446 ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
447 ok(dst_len == sizeof(dst), "got %d\n", dst_len);
448 ok(dst == 10, "got %08x\n", dst);
449 SysFreeString(b);
451 dst = 0x1234;
452 *(SCODE *)src = 0x4321cafe;
453 hr = IDataConvert_DataConvert(convert, DBTYPE_ERROR, DBTYPE_I2, 0, &dst_len, src, &dst, sizeof(dst), 0, &dst_status, 0, 0, 0);
454 ok(hr == DB_E_UNSUPPORTEDCONVERSION, "got %08x\n", hr);
455 ok(dst_status == DBSTATUS_E_BADACCESSOR, "got %08x\n", dst_status);
456 ok(dst_len == sizeof(dst), "got %d\n", dst_len);
457 ok(dst == 0x1234, "got %08x\n", dst);
459 dst = 0x1234;
460 *(VARIANT_BOOL *)src = VARIANT_TRUE;
461 hr = IDataConvert_DataConvert(convert, DBTYPE_BOOL, DBTYPE_I2, 0, &dst_len, src, &dst, sizeof(dst), 0, &dst_status, 0, 0, 0);
462 ok(hr == S_OK, "got %08x\n", hr);
463 ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
464 ok(dst_len == sizeof(dst), "got %d\n", dst_len);
465 ok(dst == -1, "got %08x\n", dst);
467 dst = 0x1234;
468 *(VARIANT_BOOL *)src = VARIANT_FALSE;
469 hr = IDataConvert_DataConvert(convert, DBTYPE_BOOL, DBTYPE_I2, 0, &dst_len, src, &dst, sizeof(dst), 0, &dst_status, 0, 0, 0);
470 ok(hr == S_OK, "got %08x\n", hr);
471 ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
472 ok(dst_len == sizeof(dst), "got %d\n", dst_len);
473 ok(dst == 0, "got %08x\n", dst);
475 dst = 0x1234;
476 V_VT((VARIANT*)src) = VT_I2;
477 V_I2((VARIANT*)src) = 0x4321;
478 hr = IDataConvert_DataConvert(convert, DBTYPE_VARIANT, DBTYPE_I2, 0, &dst_len, src, &dst, sizeof(dst), 0, &dst_status, 0, 0, 0);
479 todo_wine
481 ok(hr == S_OK, "got %08x\n", hr);
482 ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
484 ok(dst_len == sizeof(dst), "got %d\n", dst_len);
485 todo_wine
486 ok(dst == 0x4321, "got %08x\n", dst);
488 dst = 0x1234;
489 memset(src, 0, sizeof(DECIMAL));
490 ((DECIMAL*)src)->u1.Lo64 = 0x4321;
491 hr = IDataConvert_DataConvert(convert, DBTYPE_DECIMAL, DBTYPE_I2, 0, &dst_len, src, &dst, sizeof(dst), 0, &dst_status, 0, 0, 0);
492 ok(hr == S_OK, "got %08x\n", hr);
493 ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
494 ok(dst_len == sizeof(dst), "got %d\n", dst_len);
495 ok(dst == 0x4321, "got %08x\n", dst);
497 dst = 0x1234;
498 *(signed char*)src = 0xab;
499 hr = IDataConvert_DataConvert(convert, DBTYPE_I1, DBTYPE_I2, 0, &dst_len, src, &dst, sizeof(dst), 0, &dst_status, 0, 0, 0);
500 ok(hr == S_OK, "got %08x\n", hr);
501 ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
502 ok(dst_len == sizeof(dst), "got %d\n", dst_len);
503 ok(dst == (signed short)0xffab, "got %08x\n", dst);
505 dst = 0x1234;
506 *(BYTE*)src = 0xab;
507 hr = IDataConvert_DataConvert(convert, DBTYPE_UI1, DBTYPE_I2, 0, &dst_len, src, &dst, sizeof(dst), 0, &dst_status, 0, 0, 0);
508 ok(hr == S_OK, "got %08x\n", hr);
509 ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
510 ok(dst_len == sizeof(dst), "got %d\n", dst_len);
511 ok(dst == 0xab, "got %08x\n", dst);
513 dst = 0x1234;
514 *(WORD*)src = 0x4321;
515 hr = IDataConvert_DataConvert(convert, DBTYPE_UI2, DBTYPE_I2, 0, &dst_len, src, &dst, sizeof(dst), 0, &dst_status, 0, 0, 0);
516 ok(hr == S_OK, "got %08x\n", hr);
517 ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
518 ok(dst_len == sizeof(dst), "got %d\n", dst_len);
519 ok(dst == 0x4321, "got %08x\n", dst);
521 dst = 0x1234;
522 *(WORD*)src = 0xabcd;
523 hr = IDataConvert_DataConvert(convert, DBTYPE_UI2, DBTYPE_I2, 0, &dst_len, src, &dst, sizeof(dst), 0, &dst_status, 0, 0, 0);
524 ok(hr == DB_E_ERRORSOCCURRED, "got %08x\n", hr);
525 ok(dst_status == DBSTATUS_E_DATAOVERFLOW, "got %08x\n", dst_status);
526 ok(dst_len == sizeof(dst), "got %d\n", dst_len);
527 ok(dst == 0x1234, "got %08x\n", dst);
529 dst = 0x1234;
530 *(DWORD*)src = 0xabcd1234;
531 hr = IDataConvert_DataConvert(convert, DBTYPE_UI4, DBTYPE_I2, 0, &dst_len, src, &dst, sizeof(dst), 0, &dst_status, 0, 0, 0);
532 todo_wine
533 ok(hr == DB_E_DATAOVERFLOW, "got %08x\n", hr);
534 ok(dst_status == DBSTATUS_E_DATAOVERFLOW, "got %08x\n", dst_status);
535 ok(dst_len == sizeof(dst), "got %d\n", dst_len);
536 ok(dst == 0x1234, "got %08x\n", dst);
538 dst = 0x1234;
539 *(DWORD*)src = 0x1234abcd;
540 hr = IDataConvert_DataConvert(convert, DBTYPE_UI4, DBTYPE_I2, 0, &dst_len, src, &dst, sizeof(dst), 0, &dst_status, 0, 0, 0);
541 todo_wine
542 ok(hr == DB_E_DATAOVERFLOW, "got %08x\n", hr);
543 ok(dst_status == DBSTATUS_E_DATAOVERFLOW, "got %08x\n", dst_status);
544 ok(dst_len == sizeof(dst), "got %d\n", dst_len);
545 ok(dst == 0x1234, "got %08x\n", dst);
547 dst = 0x1234;
548 *(DWORD*)src = 0x4321;
549 hr = IDataConvert_DataConvert(convert, DBTYPE_UI4, DBTYPE_I2, 0, &dst_len, src, &dst, sizeof(dst), 0, &dst_status, 0, 0, 0);
550 ok(hr == S_OK, "got %08x\n", hr);
551 ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
552 ok(dst_len == sizeof(dst), "got %d\n", dst_len);
553 ok(dst == 0x4321, "got %08x\n", dst);
555 dst = 0x1234;
556 ((LARGE_INTEGER*)src)->QuadPart = 0x1234abcd;
557 hr = IDataConvert_DataConvert(convert, DBTYPE_I8, DBTYPE_I2, 0, &dst_len, src, &dst, sizeof(dst), 0, &dst_status, 0, 0, 0);
558 ok(hr == DB_E_ERRORSOCCURRED ||
559 broken(hr == DB_E_UNSUPPORTEDCONVERSION), /* win98 */
560 "got %08x\n", hr);
561 if(hr != DB_E_UNSUPPORTEDCONVERSION) /* win98 doesn't support I8/UI8 */
563 ok(dst_status == DBSTATUS_E_DATAOVERFLOW, "got %08x\n", dst_status);
564 ok(dst_len == sizeof(dst), "got %d\n", dst_len);
565 ok(dst == 0x1234, "got %08x\n", dst);
567 dst = 0x1234;
568 ((LARGE_INTEGER*)src)->QuadPart = 0x4321;
569 hr = IDataConvert_DataConvert(convert, DBTYPE_I8, DBTYPE_I2, 0, &dst_len, src, &dst, sizeof(dst), 0, &dst_status, 0, 0, 0);
570 ok(hr == S_OK, "got %08x\n", hr);
571 ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
572 ok(dst_len == sizeof(dst), "got %d\n", dst_len);
573 ok(dst == 0x4321, "got %08x\n", dst);
575 dst = 0x1234;
576 ((ULARGE_INTEGER*)src)->QuadPart = 0x4321;
577 hr = IDataConvert_DataConvert(convert, DBTYPE_UI8, DBTYPE_I2, 0, &dst_len, src, &dst, sizeof(dst), 0, &dst_status, 0, 0, 0);
578 ok(hr == S_OK, "got %08x\n", hr);
579 ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
580 ok(dst_len == sizeof(dst), "got %d\n", dst_len);
581 ok(dst == 0x4321, "got %08x\n", dst);
584 dst = 0x1234;
585 strcpy((char *)src, "10");
586 hr = IDataConvert_DataConvert(convert, DBTYPE_STR, DBTYPE_I2, 2, &dst_len, src, &dst, sizeof(dst), 0, &dst_status, 0, 0, 0);
587 ok(hr == S_OK, "got %08x\n", hr);
588 ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
589 ok(dst_len == sizeof(dst), "got %d\n", dst_len);
590 ok(dst == 10, "got %08x\n", dst);
592 dst = 0x1234;
593 strcpy((char *)src, "10");
594 hr = IDataConvert_DataConvert(convert, DBTYPE_STR, DBTYPE_I2, 0, &dst_len, src, &dst, sizeof(dst), 0, &dst_status, 0, 0, DBDATACONVERT_LENGTHFROMNTS);
595 ok(hr == S_OK, "got %08x\n", hr);
596 ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
597 ok(dst_len == sizeof(dst), "got %d\n", dst_len);
598 ok(dst == 10, "got %08x\n", dst);
600 dst = 0x1234;
601 memcpy(src, ten, sizeof(ten));
602 hr = IDataConvert_DataConvert(convert, DBTYPE_WSTR, DBTYPE_I2, 4, &dst_len, src, &dst, sizeof(dst), 0, &dst_status, 0, 0, 0);
603 ok(hr == S_OK, "got %08x\n", hr);
604 ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
605 ok(dst_len == sizeof(dst), "got %d\n", dst_len);
606 ok(dst == 10, "got %08x\n", dst);
608 dst = 0x1234;
609 memcpy(src, ten, sizeof(ten));
610 hr = IDataConvert_DataConvert(convert, DBTYPE_WSTR, DBTYPE_I2, 0, &dst_len, src, &dst, sizeof(dst), 0, &dst_status, 0, 0, DBDATACONVERT_LENGTHFROMNTS);
611 ok(hr == S_OK, "got %08x\n", hr);
612 ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
613 ok(dst_len == sizeof(dst), "got %d\n", dst_len);
614 ok(dst == 10, "got %08x\n", dst);
616 IDataConvert_Release(convert);
619 static void test_converttoi4(void)
621 IDataConvert *convert;
622 HRESULT hr;
623 INT i4;
624 BYTE src[20];
625 DBSTATUS dst_status;
626 DBLENGTH dst_len;
627 static const WCHAR ten[] = {'1','0',0};
628 BSTR b;
630 hr = CoCreateInstance(&CLSID_OLEDB_CONVERSIONLIBRARY, NULL, CLSCTX_INPROC_SERVER, &IID_IDataConvert, (void**)&convert);
631 if(FAILED(hr))
633 win_skip("Unable to load oledb conversion library\n");
634 return;
637 i4 = 0x12345678;
638 hr = IDataConvert_DataConvert(convert, DBTYPE_EMPTY, DBTYPE_I4, 0, &dst_len, src, &i4, sizeof(i4), 0, &dst_status, 0, 0, 0);
639 ok(hr == S_OK, "got %08x\n", hr);
640 ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
641 ok(dst_len == sizeof(i4), "got %d\n", dst_len);
642 ok(i4 == 0, "got %08x\n", i4);
644 i4 = 0x12345678;
645 hr = IDataConvert_DataConvert(convert, DBTYPE_NULL, DBTYPE_I4, 0, &dst_len, src, &i4, sizeof(i4), 0, &dst_status, 0, 0, 0);
646 ok(hr == DB_E_UNSUPPORTEDCONVERSION, "got %08x\n", hr);
647 ok(dst_status == DBSTATUS_E_BADACCESSOR, "got %08x\n", dst_status);
648 ok(dst_len == sizeof(i4), "got %d\n", dst_len);
649 ok(i4 == 0x12345678, "got %08x\n", i4);
651 i4 = 0x12345678;
652 *(short *)src = 0x4321;
653 hr = IDataConvert_DataConvert(convert, DBTYPE_I2, DBTYPE_I4, 0, &dst_len, src, &i4, sizeof(i4), 0, &dst_status, 0, 0, 0);
654 ok(hr == S_OK, "got %08x\n", hr);
655 ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
656 ok(dst_len == sizeof(i4), "got %d\n", dst_len);
657 ok(i4 == 0x4321, "got %08x\n", i4);
659 i4 = 0x12345678;
660 *(int *)src = 0x4321cafe;
661 hr = IDataConvert_DataConvert(convert, DBTYPE_I4, DBTYPE_I4, 0, &dst_len, src, &i4, sizeof(i4), 0, &dst_status, 0, 0, 0);
662 ok(hr == S_OK, "got %08x\n", hr);
663 ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
664 ok(dst_len == sizeof(i4), "got %d\n", dst_len);
665 ok(i4 == 0x4321cafe, "got %08x\n", i4);
667 i4 = 0x12345678;
668 *(FLOAT *)src = 10.75;
669 hr = IDataConvert_DataConvert(convert, DBTYPE_R4, DBTYPE_I4, 0, &dst_len, src, &i4, sizeof(i4), 0, &dst_status, 0, 0, 0);
670 ok(hr == S_OK, "got %08x\n", hr);
671 ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
672 ok(dst_len == sizeof(i4), "got %d\n", dst_len);
673 ok(i4 == 11, "got %08x\n", i4);
675 i4 = 0x12345678;
676 *(FLOAT *)src = -10.75;
677 hr = IDataConvert_DataConvert(convert, DBTYPE_R4, DBTYPE_I4, 0, &dst_len, src, &i4, sizeof(i4), 0, &dst_status, 0, 0, 0);
678 ok(hr == S_OK, "got %08x\n", hr);
679 ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
680 ok(dst_len == sizeof(i4), "got %d\n", dst_len);
681 ok(i4 == -11, "got %08x\n", i4);
683 i4 = 0x12345678;
684 *(double *)src = 10.75;
685 hr = IDataConvert_DataConvert(convert, DBTYPE_R8, DBTYPE_I4, 0, &dst_len, src, &i4, sizeof(i4), 0, &dst_status, 0, 0, 0);
686 ok(hr == S_OK, "got %08x\n", hr);
687 ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
688 ok(dst_len == sizeof(i4), "got %d\n", dst_len);
689 ok(i4 == 11, "got %08x\n", i4);
691 i4 = 0x12345678;
692 ((LARGE_INTEGER *)src)->QuadPart = 107500;
693 hr = IDataConvert_DataConvert(convert, DBTYPE_CY, DBTYPE_I4, 0, &dst_len, src, &i4, sizeof(i4), 0, &dst_status, 0, 0, 0);
694 ok(hr == S_OK, "got %08x\n", hr);
695 ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
696 ok(dst_len == sizeof(i4), "got %d\n", dst_len);
697 ok(i4 == 11, "got %08x\n", i4);
699 i4 = 0x12345678;
700 *(DATE *)src = 10.7500;
701 hr = IDataConvert_DataConvert(convert, DBTYPE_DATE, DBTYPE_I4, 0, &dst_len, src, &i4, sizeof(i4), 0, &dst_status, 0, 0, 0);
702 ok(hr == S_OK, "got %08x\n", hr);
703 ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
704 ok(dst_len == sizeof(i4), "got %d\n", dst_len);
705 ok(i4 == 11, "got %08x\n", i4);
707 i4 = 0x12345678;
708 b = SysAllocString(ten);
709 *(BSTR *)src = b;
710 hr = IDataConvert_DataConvert(convert, DBTYPE_BSTR, DBTYPE_I4, 0, &dst_len, src, &i4, sizeof(i4), 0, &dst_status, 0, 0, 0);
711 ok(hr == S_OK, "got %08x\n", hr);
712 ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
713 ok(dst_len == sizeof(i4), "got %d\n", dst_len);
714 ok(i4 == 10, "got %08x\n", i4);
715 SysFreeString(b);
717 i4 = 0x12345678;
718 *(SCODE *)src = 0x4321cafe;
719 hr = IDataConvert_DataConvert(convert, DBTYPE_ERROR, DBTYPE_I4, 0, &dst_len, src, &i4, sizeof(i4), 0, &dst_status, 0, 0, 0);
720 ok(hr == DB_E_UNSUPPORTEDCONVERSION, "got %08x\n", hr);
721 ok(dst_status == DBSTATUS_E_BADACCESSOR, "got %08x\n", dst_status);
722 ok(dst_len == sizeof(i4), "got %d\n", dst_len);
723 ok(i4 == 0x12345678, "got %08x\n", i4);
725 i4 = 0x12345678;
726 *(VARIANT_BOOL *)src = VARIANT_TRUE;
727 hr = IDataConvert_DataConvert(convert, DBTYPE_BOOL, DBTYPE_I4, 0, &dst_len, src, &i4, sizeof(i4), 0, &dst_status, 0, 0, 0);
728 ok(hr == S_OK, "got %08x\n", hr);
729 ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
730 ok(dst_len == sizeof(i4), "got %d\n", dst_len);
731 ok(i4 == 0xffffffff, "got %08x\n", i4);
733 i4 = 0x12345678;
734 *(VARIANT_BOOL *)src = VARIANT_FALSE;
735 hr = IDataConvert_DataConvert(convert, DBTYPE_BOOL, DBTYPE_I4, 0, &dst_len, src, &i4, sizeof(i4), 0, &dst_status, 0, 0, 0);
736 ok(hr == S_OK, "got %08x\n", hr);
737 ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
738 ok(dst_len == sizeof(i4), "got %d\n", dst_len);
739 ok(i4 == 0, "got %08x\n", i4);
741 i4 = 0x12345678;
742 V_VT((VARIANT*)src) = VT_I2;
743 V_I2((VARIANT*)src) = 0x1234;
744 hr = IDataConvert_DataConvert(convert, DBTYPE_VARIANT, DBTYPE_I4, 0, &dst_len, src, &i4, sizeof(i4), 0, &dst_status, 0, 0, 0);
745 todo_wine
747 ok(hr == S_OK, "got %08x\n", hr);
748 ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
750 ok(dst_len == sizeof(i4), "got %d\n", dst_len);
751 todo_wine
752 ok(i4 == 0x1234, "got %08x\n", i4);
754 i4 = 0x12345678;
755 memset(src, 0, sizeof(DECIMAL));
756 ((DECIMAL*)src)->u1.Lo64 = 0x1234;
757 hr = IDataConvert_DataConvert(convert, DBTYPE_DECIMAL, DBTYPE_I4, 0, &dst_len, src, &i4, sizeof(i4), 0, &dst_status, 0, 0, 0);
758 ok(hr == S_OK, "got %08x\n", hr);
759 ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
760 ok(dst_len == sizeof(i4), "got %d\n", dst_len);
761 ok(i4 == 0x1234, "got %08x\n", i4);
763 i4 = 0x12345678;
764 *(signed char*)src = 0xab;
765 hr = IDataConvert_DataConvert(convert, DBTYPE_I1, DBTYPE_I4, 0, &dst_len, src, &i4, sizeof(i4), 0, &dst_status, 0, 0, 0);
766 ok(hr == S_OK, "got %08x\n", hr);
767 ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
768 ok(dst_len == sizeof(i4), "got %d\n", dst_len);
769 ok(i4 == 0xffffffab, "got %08x\n", i4);
771 i4 = 0x12345678;
772 *(BYTE*)src = 0xab;
773 hr = IDataConvert_DataConvert(convert, DBTYPE_UI1, DBTYPE_I4, 0, &dst_len, src, &i4, sizeof(i4), 0, &dst_status, 0, 0, 0);
774 ok(hr == S_OK, "got %08x\n", hr);
775 ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
776 ok(dst_len == sizeof(i4), "got %d\n", dst_len);
777 ok(i4 == 0xab, "got %08x\n", i4);
779 i4 = 0x12345678;
780 *(WORD*)src = 0xabcd;
781 hr = IDataConvert_DataConvert(convert, DBTYPE_UI2, DBTYPE_I4, 0, &dst_len, src, &i4, sizeof(i4), 0, &dst_status, 0, 0, 0);
782 ok(hr == S_OK, "got %08x\n", hr);
783 ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
784 ok(dst_len == sizeof(i4), "got %d\n", dst_len);
785 ok(i4 == 0xabcd, "got %08x\n", i4);
787 i4 = 0x12345678;
788 *(DWORD*)src = 0xabcd1234;
789 hr = IDataConvert_DataConvert(convert, DBTYPE_UI4, DBTYPE_I4, 0, &dst_len, src, &i4, sizeof(i4), 0, &dst_status, 0, 0, 0);
790 ok(hr == DB_E_ERRORSOCCURRED, "got %08x\n", hr);
791 ok(dst_status == DBSTATUS_E_DATAOVERFLOW, "got %08x\n", dst_status);
792 ok(dst_len == sizeof(i4), "got %d\n", dst_len);
793 ok(i4 == 0x12345678, "got %08x\n", i4);
795 i4 = 0x12345678;
796 *(DWORD*)src = 0x1234abcd;
797 hr = IDataConvert_DataConvert(convert, DBTYPE_UI4, DBTYPE_I4, 0, &dst_len, src, &i4, sizeof(i4), 0, &dst_status, 0, 0, 0);
798 ok(hr == S_OK, "got %08x\n", hr);
799 ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
800 ok(dst_len == sizeof(i4), "got %d\n", dst_len);
801 ok(i4 == 0x1234abcd, "got %08x\n", i4);
803 i4 = 0x12345678;
804 ((LARGE_INTEGER*)src)->QuadPart = 0x1234abcd;
805 hr = IDataConvert_DataConvert(convert, DBTYPE_I8, DBTYPE_I4, 0, &dst_len, src, &i4, sizeof(i4), 0, &dst_status, 0, 0, 0);
806 ok(hr == S_OK ||
807 broken(hr == DB_E_UNSUPPORTEDCONVERSION), /* win98 */
808 "got %08x\n", hr);
809 if(hr != DB_E_UNSUPPORTEDCONVERSION) /* win98 doesn't support I8/UI8 */
811 ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
812 ok(dst_len == sizeof(i4), "got %d\n", dst_len);
813 ok(i4 == 0x1234abcd, "got %08x\n", i4);
815 i4 = 0x12345678;
816 ((ULARGE_INTEGER*)src)->QuadPart = 0x1234abcd;
817 hr = IDataConvert_DataConvert(convert, DBTYPE_UI8, DBTYPE_I4, 0, &dst_len, src, &i4, sizeof(i4), 0, &dst_status, 0, 0, 0);
818 ok(hr == S_OK, "got %08x\n", hr);
819 ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
820 ok(dst_len == sizeof(i4), "got %d\n", dst_len);
821 ok(i4 == 0x1234abcd, "got %08x\n", i4);
824 i4 = 0x12345678;
825 strcpy((char *)src, "10");
826 hr = IDataConvert_DataConvert(convert, DBTYPE_STR, DBTYPE_I4, 2, &dst_len, src, &i4, sizeof(i4), 0, &dst_status, 0, 0, 0);
827 ok(hr == S_OK, "got %08x\n", hr);
828 ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
829 ok(dst_len == sizeof(i4), "got %d\n", dst_len);
830 ok(i4 == 10, "got %08x\n", i4);
832 i4 = 0x12345678;
833 strcpy((char *)src, "10");
834 hr = IDataConvert_DataConvert(convert, DBTYPE_STR, DBTYPE_I4, 0, &dst_len, src, &i4, sizeof(i4), 0, &dst_status, 0, 0, DBDATACONVERT_LENGTHFROMNTS);
835 ok(hr == S_OK, "got %08x\n", hr);
836 ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
837 ok(dst_len == sizeof(i4), "got %d\n", dst_len);
838 ok(i4 == 10, "got %08x\n", i4);
840 i4 = 0x12345678;
841 memcpy(src, ten, sizeof(ten));
842 hr = IDataConvert_DataConvert(convert, DBTYPE_WSTR, DBTYPE_I4, 4, &dst_len, src, &i4, sizeof(i4), 0, &dst_status, 0, 0, 0);
843 ok(hr == S_OK, "got %08x\n", hr);
844 ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
845 ok(dst_len == sizeof(i4), "got %d\n", dst_len);
846 ok(i4 == 10, "got %08x\n", i4);
848 i4 = 0x12345678;
849 memcpy(src, ten, sizeof(ten));
850 hr = IDataConvert_DataConvert(convert, DBTYPE_WSTR, DBTYPE_I4, 0, &dst_len, src, &i4, sizeof(i4), 0, &dst_status, 0, 0, DBDATACONVERT_LENGTHFROMNTS);
851 ok(hr == S_OK, "got %08x\n", hr);
852 ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
853 ok(dst_len == sizeof(i4), "got %d\n", dst_len);
854 ok(i4 == 10, "got %08x\n", i4);
856 IDataConvert_Release(convert);
859 static void test_converttobstr(void)
861 IDataConvert *convert;
862 HRESULT hr;
863 BSTR dst;
864 BYTE src[20];
865 DBSTATUS dst_status;
866 DBLENGTH dst_len;
867 static const WCHAR ten[] = {'1','0',0};
868 BSTR b;
870 hr = CoCreateInstance(&CLSID_OLEDB_CONVERSIONLIBRARY, NULL, CLSCTX_INPROC_SERVER, &IID_IDataConvert, (void**)&convert);
871 if(FAILED(hr))
873 win_skip("Unable to load oledb conversion library\n");
874 return;
877 hr = IDataConvert_DataConvert(convert, DBTYPE_EMPTY, DBTYPE_BSTR, 0, &dst_len, src, &dst, sizeof(dst), 0, &dst_status, 0, 0, 0);
878 ok(hr == S_OK, "got %08x\n", hr);
879 ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
880 ok(dst_len == sizeof(dst), "got %d\n", dst_len);
881 ok(dst != NULL, "got %p\n", dst);
882 ok(SysStringLen(dst) == 0, "got %d\n", SysStringLen(dst));
883 SysFreeString(dst);
885 dst = (void*)0x1234;
886 hr = IDataConvert_DataConvert(convert, DBTYPE_NULL, DBTYPE_BSTR, 0, &dst_len, src, &dst, sizeof(dst), 0, &dst_status, 0, 0, 0);
887 ok(hr == DB_E_UNSUPPORTEDCONVERSION, "got %08x\n", hr);
888 ok(dst_status == DBSTATUS_E_BADACCESSOR, "got %08x\n", dst_status);
889 ok(dst_len == sizeof(dst), "got %d\n", dst_len);
890 ok(dst == (void*)0x1234, "got %p\n", dst);
892 *(short *)src = 4321;
893 hr = IDataConvert_DataConvert(convert, DBTYPE_I2, DBTYPE_BSTR, 0, &dst_len, src, &dst, sizeof(dst), 0, &dst_status, 0, 0, 0);
894 ok(hr == S_OK, "got %08x\n", hr);
895 ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
896 ok(dst_len == sizeof(dst), "got %d\n", dst_len);
897 ok(dst != NULL, "got %p\n", dst);
898 ok(SysStringLen(dst) == 4, "got %d\n", SysStringLen(dst));
899 SysFreeString(dst);
901 b = SysAllocString(ten);
902 *(BSTR *)src = b;
903 hr = IDataConvert_DataConvert(convert, DBTYPE_BSTR, DBTYPE_BSTR, 0, &dst_len, src, &dst, sizeof(dst), 0, &dst_status, 0, 0, 0);
904 ok(hr == S_OK, "got %08x\n", hr);
905 ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
906 ok(dst_len == sizeof(dst), "got %d\n", dst_len);
907 ok(dst != NULL, "got %p\n", dst);
908 ok(dst != b, "got %p src %p\n", dst, b);
909 ok(!lstrcmpW(b, dst), "got %s\n", wine_dbgstr_w(dst));
910 SysFreeString(dst);
911 SysFreeString(b);
913 IDataConvert_Release(convert);
916 static void test_converttowstr(void)
918 IDataConvert *convert;
919 HRESULT hr;
920 WCHAR dst[100];
921 BYTE src[20];
922 DBSTATUS dst_status;
923 DBLENGTH dst_len;
924 static const WCHAR ten[] = {'1','0',0};
925 static const WCHAR fourthreetwoone[] = {'4','3','2','1',0};
926 static const WCHAR guid_str[] = {
927 '{','0','C','7','3','3','A','8','D','-','2','A','1','C','-','1','1','C','E','-',
928 'A','D','E','5','-','0','0','A','A','0','0','4','4','7','7','3','D','}',0};
929 static const WCHAR hexunpacked_w[] = {'5','7','0','0','6','9','0','0','6','E','0','0','6','5','0','0','0','0','0','0', 0 };
930 static const WCHAR hexpacked_w[] = {'W','i','n','e', 0 };
931 BSTR b;
933 hr = CoCreateInstance(&CLSID_OLEDB_CONVERSIONLIBRARY, NULL, CLSCTX_INPROC_SERVER, &IID_IDataConvert, (void**)&convert);
934 if(FAILED(hr))
936 win_skip("Unable to load oledb conversion library\n");
937 return;
941 memset(dst, 0xcc, sizeof(dst));
942 hr = IDataConvert_DataConvert(convert, DBTYPE_EMPTY, DBTYPE_WSTR, 0, &dst_len, src, dst, sizeof(dst), 0, &dst_status, 0, 0, 0);
943 ok(hr == S_OK, "got %08x\n", hr);
944 ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
945 ok(dst_len == 0, "got %d\n", dst_len);
946 ok(dst[0] == 0, "got %02x\n", dst[0]);
947 ok(dst[1] == 0xcccc, "got %02x\n", dst[1]);
949 memset(dst, 0xcc, sizeof(dst));
950 hr = IDataConvert_DataConvert(convert, DBTYPE_NULL, DBTYPE_WSTR, 0, &dst_len, src, dst, sizeof(dst), 0, &dst_status, 0, 0, 0);
951 ok(hr == DB_E_UNSUPPORTEDCONVERSION, "got %08x\n", hr);
952 ok(dst_status == DBSTATUS_E_BADACCESSOR, "got %08x\n", dst_status);
953 ok(dst_len == 0, "got %d\n", dst_len);
954 ok(dst[0] == 0xcccc, "got %02x\n", dst[0]);
956 *(short *)src = 4321;
957 hr = IDataConvert_DataConvert(convert, DBTYPE_I2, DBTYPE_WSTR, 0, &dst_len, src, dst, sizeof(dst), 0, &dst_status, 0, 0, 0);
958 ok(hr == S_OK, "got %08x\n", hr);
959 ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
960 ok(dst_len == 8, "got %d\n", dst_len);
961 ok(!lstrcmpW(dst, fourthreetwoone), "got %s\n", wine_dbgstr_w(dst));
963 *(short *)src = 4321;
964 memset(dst, 0xcc, sizeof(dst));
965 hr = IDataConvert_DataConvert(convert, DBTYPE_I2, DBTYPE_WSTR, 0, &dst_len, src, dst, 0, 0, &dst_status, 0, 0, 0);
966 ok(hr == DB_E_ERRORSOCCURRED, "got %08x\n", hr);
967 ok(dst_status == DBSTATUS_E_DATAOVERFLOW, "got %08x\n", dst_status);
968 ok(dst_len == 8, "got %d\n", dst_len);
969 ok(dst[0] == 0xcccc, "got %02x\n", dst[0]);
971 *(short *)src = 4321;
972 memset(dst, 0xcc, sizeof(dst));
973 hr = IDataConvert_DataConvert(convert, DBTYPE_I2, DBTYPE_WSTR, 0, &dst_len, src, NULL, 0, 0, &dst_status, 0, 0, 0);
974 ok(hr == S_OK, "got %08x\n", hr);
975 ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
976 ok(dst_len == 8, "got %d\n", dst_len);
977 ok(dst[0] == 0xcccc, "got %02x\n", dst[0]);
979 *(short *)src = 4321;
980 memset(dst, 0xcc, sizeof(dst));
981 hr = IDataConvert_DataConvert(convert, DBTYPE_I2, DBTYPE_WSTR, 0, &dst_len, src, dst, 4, 0, &dst_status, 0, 0, 0);
982 ok(hr == S_OK, "got %08x\n", hr);
983 ok(dst_status == DBSTATUS_S_TRUNCATED, "got %08x\n", dst_status);
984 ok(dst_len == 8, "got %d\n", dst_len);
985 ok(dst[0] == '4', "got %02x\n", dst[0]);
986 ok(dst[1] == 0, "got %02x\n", dst[1]);
987 ok(dst[2] == 0xcccc, "got %02x\n", dst[2]);
989 *(short *)src = 4321;
990 memset(dst, 0xcc, sizeof(dst));
991 hr = IDataConvert_DataConvert(convert, DBTYPE_I2, DBTYPE_WSTR, 0, &dst_len, src, dst, 2, 0, &dst_status, 0, 0, 0);
992 ok(hr == S_OK, "got %08x\n", hr);
993 ok(dst_status == DBSTATUS_S_TRUNCATED, "got %08x\n", dst_status);
994 ok(dst_len == 8, "got %d\n", dst_len);
995 ok(dst[0] == 0, "got %02x\n", dst[0]);
996 ok(dst[1] == 0xcccc, "got %02x\n", dst[1]);
998 *(short *)src = 4321;
999 memset(dst, 0xcc, sizeof(dst));
1000 hr = IDataConvert_DataConvert(convert, DBTYPE_I2, DBTYPE_WSTR, 0, &dst_len, src, dst, 8, 0, &dst_status, 0, 0, 0);
1001 ok(hr == S_OK, "got %08x\n", hr);
1002 ok(dst_status == DBSTATUS_S_TRUNCATED, "got %08x\n", dst_status);
1003 ok(dst_len == 8, "got %d\n", dst_len);
1004 ok(dst[0] == '4', "got %02x\n", dst[0]);
1005 ok(dst[1] == '3', "got %02x\n", dst[1]);
1006 ok(dst[2] == '2', "got %02x\n", dst[2]);
1007 ok(dst[3] == 0, "got %02x\n", dst[3]);
1008 ok(dst[4] == 0xcccc, "got %02x\n", dst[4]);
1012 *(int *)src = 4321;
1013 hr = IDataConvert_DataConvert(convert, DBTYPE_I4, DBTYPE_WSTR, 0, &dst_len, src, dst, sizeof(dst), 0, &dst_status, 0, 0, 0);
1014 ok(hr == S_OK, "got %08x\n", hr);
1015 ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
1016 ok(dst_len == 8, "got %d\n", dst_len);
1017 ok(!lstrcmpW(dst, fourthreetwoone), "got %s\n", wine_dbgstr_w(dst));
1019 *(int *)src = 4321;
1020 memset(dst, 0xcc, sizeof(dst));
1021 hr = IDataConvert_DataConvert(convert, DBTYPE_I4, DBTYPE_WSTR, 0, &dst_len, src, dst, 0, 0, &dst_status, 0, 0, 0);
1022 ok(hr == DB_E_ERRORSOCCURRED, "got %08x\n", hr);
1023 ok(dst_status == DBSTATUS_E_DATAOVERFLOW, "got %08x\n", dst_status);
1024 ok(dst_len == 8, "got %d\n", dst_len);
1025 ok(dst[0] == 0xcccc, "got %02x\n", dst[0]);
1027 *(int *)src = 4321;
1028 memset(dst, 0xcc, sizeof(dst));
1029 hr = IDataConvert_DataConvert(convert, DBTYPE_I4, DBTYPE_WSTR, 0, &dst_len, src, NULL, 0, 0, &dst_status, 0, 0, 0);
1030 ok(hr == S_OK, "got %08x\n", hr);
1031 ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
1032 ok(dst_len == 8, "got %d\n", dst_len);
1033 ok(dst[0] == 0xcccc, "got %02x\n", dst[0]);
1035 *(int *)src = 4321;
1036 memset(dst, 0xcc, sizeof(dst));
1037 hr = IDataConvert_DataConvert(convert, DBTYPE_I4, DBTYPE_WSTR, 0, &dst_len, src, dst, 4, 0, &dst_status, 0, 0, 0);
1038 ok(hr == S_OK, "got %08x\n", hr);
1039 ok(dst_status == DBSTATUS_S_TRUNCATED, "got %08x\n", dst_status);
1040 ok(dst_len == 8, "got %d\n", dst_len);
1041 ok(dst[0] == '4', "got %02x\n", dst[0]);
1042 ok(dst[1] == 0, "got %02x\n", dst[1]);
1043 ok(dst[2] == 0xcccc, "got %02x\n", dst[2]);
1045 *(int *)src = 4321;
1046 memset(dst, 0xcc, sizeof(dst));
1047 hr = IDataConvert_DataConvert(convert, DBTYPE_I4, DBTYPE_WSTR, 0, &dst_len, src, dst, 2, 0, &dst_status, 0, 0, 0);
1048 ok(hr == S_OK, "got %08x\n", hr);
1049 ok(dst_status == DBSTATUS_S_TRUNCATED, "got %08x\n", dst_status);
1050 ok(dst_len == 8, "got %d\n", dst_len);
1051 ok(dst[0] == 0, "got %02x\n", dst[0]);
1052 ok(dst[1] == 0xcccc, "got %02x\n", dst[1]);
1054 *(int *)src = 4321;
1055 memset(dst, 0xcc, sizeof(dst));
1056 hr = IDataConvert_DataConvert(convert, DBTYPE_I4, DBTYPE_WSTR, 0, &dst_len, src, dst, 8, 0, &dst_status, 0, 0, 0);
1057 ok(hr == S_OK, "got %08x\n", hr);
1058 ok(dst_status == DBSTATUS_S_TRUNCATED, "got %08x\n", dst_status);
1059 ok(dst_len == 8, "got %d\n", dst_len);
1060 ok(dst[0] == '4', "got %02x\n", dst[0]);
1061 ok(dst[1] == '3', "got %02x\n", dst[1]);
1062 ok(dst[2] == '2', "got %02x\n", dst[2]);
1063 ok(dst[3] == 0, "got %02x\n", dst[3]);
1064 ok(dst[4] == 0xcccc, "got %02x\n", dst[4]);
1068 *(float *)src = 4321;
1069 hr = IDataConvert_DataConvert(convert, DBTYPE_R4, DBTYPE_WSTR, 0, &dst_len, src, dst, sizeof(dst), 0, &dst_status, 0, 0, 0);
1070 ok(hr == S_OK, "got %08x\n", hr);
1071 ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
1072 ok(dst_len == 8, "got %d\n", dst_len);
1073 ok(!lstrcmpW(dst, fourthreetwoone), "got %s\n", wine_dbgstr_w(dst));
1075 *(float *)src = 4321;
1076 memset(dst, 0xcc, sizeof(dst));
1077 hr = IDataConvert_DataConvert(convert, DBTYPE_R4, DBTYPE_WSTR, 0, &dst_len, src, dst, 0, 0, &dst_status, 0, 0, 0);
1078 ok(hr == DB_E_ERRORSOCCURRED, "got %08x\n", hr);
1079 ok(dst_status == DBSTATUS_E_DATAOVERFLOW, "got %08x\n", dst_status);
1080 ok(dst_len == 8, "got %d\n", dst_len);
1081 ok(dst[0] == 0xcccc, "got %02x\n", dst[0]);
1083 *(float *)src = 4321;
1084 memset(dst, 0xcc, sizeof(dst));
1085 hr = IDataConvert_DataConvert(convert, DBTYPE_R4, DBTYPE_WSTR, 0, &dst_len, src, NULL, 0, 0, &dst_status, 0, 0, 0);
1086 ok(hr == S_OK, "got %08x\n", hr);
1087 ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
1088 ok(dst_len == 8, "got %d\n", dst_len);
1089 ok(dst[0] == 0xcccc, "got %02x\n", dst[0]);
1091 *(float *)src = 4321;
1092 memset(dst, 0xcc, sizeof(dst));
1093 hr = IDataConvert_DataConvert(convert, DBTYPE_R4, DBTYPE_WSTR, 0, &dst_len, src, dst, 4, 0, &dst_status, 0, 0, 0);
1094 ok(hr == S_OK, "got %08x\n", hr);
1095 ok(dst_status == DBSTATUS_S_TRUNCATED, "got %08x\n", dst_status);
1096 ok(dst_len == 8, "got %d\n", dst_len);
1097 ok(dst[0] == '4', "got %02x\n", dst[0]);
1098 ok(dst[1] == 0, "got %02x\n", dst[1]);
1099 ok(dst[2] == 0xcccc, "got %02x\n", dst[2]);
1101 *(float *)src = 4321;
1102 memset(dst, 0xcc, sizeof(dst));
1103 hr = IDataConvert_DataConvert(convert, DBTYPE_R4, DBTYPE_WSTR, 0, &dst_len, src, dst, 2, 0, &dst_status, 0, 0, 0);
1104 ok(hr == S_OK, "got %08x\n", hr);
1105 ok(dst_status == DBSTATUS_S_TRUNCATED, "got %08x\n", dst_status);
1106 ok(dst_len == 8, "got %d\n", dst_len);
1107 ok(dst[0] == 0, "got %02x\n", dst[0]);
1108 ok(dst[1] == 0xcccc, "got %02x\n", dst[1]);
1110 *(float *)src = 4321;
1111 memset(dst, 0xcc, sizeof(dst));
1112 hr = IDataConvert_DataConvert(convert, DBTYPE_R4, DBTYPE_WSTR, 0, &dst_len, src, dst, 8, 0, &dst_status, 0, 0, 0);
1113 ok(hr == S_OK, "got %08x\n", hr);
1114 ok(dst_status == DBSTATUS_S_TRUNCATED, "got %08x\n", dst_status);
1115 ok(dst_len == 8, "got %d\n", dst_len);
1116 ok(dst[0] == '4', "got %02x\n", dst[0]);
1117 ok(dst[1] == '3', "got %02x\n", dst[1]);
1118 ok(dst[2] == '2', "got %02x\n", dst[2]);
1119 ok(dst[3] == 0, "got %02x\n", dst[3]);
1120 ok(dst[4] == 0xcccc, "got %02x\n", dst[4]);
1124 *(double *)src = 4321;
1125 hr = IDataConvert_DataConvert(convert, DBTYPE_R8, DBTYPE_WSTR, 0, &dst_len, src, dst, sizeof(dst), 0, &dst_status, 0, 0, 0);
1126 ok(hr == S_OK, "got %08x\n", hr);
1127 ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
1128 ok(dst_len == 8, "got %d\n", dst_len);
1129 ok(!lstrcmpW(dst, fourthreetwoone), "got %s\n", wine_dbgstr_w(dst));
1131 *(double *)src = 4321;
1132 memset(dst, 0xcc, sizeof(dst));
1133 hr = IDataConvert_DataConvert(convert, DBTYPE_R8, DBTYPE_WSTR, 0, &dst_len, src, dst, 0, 0, &dst_status, 0, 0, 0);
1134 ok(hr == DB_E_ERRORSOCCURRED, "got %08x\n", hr);
1135 ok(dst_status == DBSTATUS_E_DATAOVERFLOW, "got %08x\n", dst_status);
1136 ok(dst_len == 8, "got %d\n", dst_len);
1137 ok(dst[0] == 0xcccc, "got %02x\n", dst[0]);
1139 *(double *)src = 4321;
1140 memset(dst, 0xcc, sizeof(dst));
1141 hr = IDataConvert_DataConvert(convert, DBTYPE_R8, DBTYPE_WSTR, 0, &dst_len, src, NULL, 0, 0, &dst_status, 0, 0, 0);
1142 ok(hr == S_OK, "got %08x\n", hr);
1143 ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
1144 ok(dst_len == 8, "got %d\n", dst_len);
1145 ok(dst[0] == 0xcccc, "got %02x\n", dst[0]);
1147 *(double *)src = 4321;
1148 memset(dst, 0xcc, sizeof(dst));
1149 hr = IDataConvert_DataConvert(convert, DBTYPE_R8, DBTYPE_WSTR, 0, &dst_len, src, dst, 4, 0, &dst_status, 0, 0, 0);
1150 ok(hr == S_OK, "got %08x\n", hr);
1151 ok(dst_status == DBSTATUS_S_TRUNCATED, "got %08x\n", dst_status);
1152 ok(dst_len == 8, "got %d\n", dst_len);
1153 ok(dst[0] == '4', "got %02x\n", dst[0]);
1154 ok(dst[1] == 0, "got %02x\n", dst[1]);
1155 ok(dst[2] == 0xcccc, "got %02x\n", dst[2]);
1157 *(double *)src = 4321;
1158 memset(dst, 0xcc, sizeof(dst));
1159 hr = IDataConvert_DataConvert(convert, DBTYPE_R8, DBTYPE_WSTR, 0, &dst_len, src, dst, 2, 0, &dst_status, 0, 0, 0);
1160 ok(hr == S_OK, "got %08x\n", hr);
1161 ok(dst_status == DBSTATUS_S_TRUNCATED, "got %08x\n", dst_status);
1162 ok(dst_len == 8, "got %d\n", dst_len);
1163 ok(dst[0] == 0, "got %02x\n", dst[0]);
1164 ok(dst[1] == 0xcccc, "got %02x\n", dst[1]);
1166 *(double *)src = 4321;
1167 memset(dst, 0xcc, sizeof(dst));
1168 hr = IDataConvert_DataConvert(convert, DBTYPE_R8, DBTYPE_WSTR, 0, &dst_len, src, dst, 8, 0, &dst_status, 0, 0, 0);
1169 ok(hr == S_OK, "got %08x\n", hr);
1170 ok(dst_status == DBSTATUS_S_TRUNCATED, "got %08x\n", dst_status);
1171 ok(dst_len == 8, "got %d\n", dst_len);
1172 ok(dst[0] == '4', "got %02x\n", dst[0]);
1173 ok(dst[1] == '3', "got %02x\n", dst[1]);
1174 ok(dst[2] == '2', "got %02x\n", dst[2]);
1175 ok(dst[3] == 0, "got %02x\n", dst[3]);
1176 ok(dst[4] == 0xcccc, "got %02x\n", dst[4]);
1180 memset(src, 0, sizeof(src));
1181 ((CY*)src)->int64 = 43210000;
1182 memset(dst, 0xcc, sizeof(dst));
1183 hr = IDataConvert_DataConvert(convert, DBTYPE_CY, DBTYPE_WSTR, 0, &dst_len, src, dst, sizeof(dst), 0, &dst_status, 0, 0, 0);
1184 ok(hr == S_OK, "got %08x\n", hr);
1185 ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
1186 ok(dst_len == 8, "got %d\n", dst_len);
1187 ok(!lstrcmpW(dst, fourthreetwoone), "got %s\n", wine_dbgstr_w(dst));
1191 memset(src, 0, sizeof(src));
1192 *(signed char *)src = 10;
1193 hr = IDataConvert_DataConvert(convert, DBTYPE_I1, DBTYPE_WSTR, 0, &dst_len, src, dst, sizeof(dst), 0, &dst_status, 0, 0, 0);
1194 ok(hr == S_OK, "got %08x\n", hr);
1195 ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
1196 ok(dst_len == 4, "got %d\n", dst_len);
1197 ok(!lstrcmpW(dst, ten), "got %s\n", wine_dbgstr_w(dst));
1199 memset(src, 0, sizeof(src));
1200 *(unsigned char *)src = 10;
1201 hr = IDataConvert_DataConvert(convert, DBTYPE_UI1, DBTYPE_WSTR, 0, &dst_len, src, dst, sizeof(dst), 0, &dst_status, 0, 0, 0);
1202 ok(hr == S_OK, "got %08x\n", hr);
1203 ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
1204 ok(dst_len == 4, "got %d\n", dst_len);
1205 ok(!lstrcmpW(dst, ten), "got %s\n", wine_dbgstr_w(dst));
1207 memset(src, 0, sizeof(src));
1208 *(unsigned short *)src = 4321;
1209 hr = IDataConvert_DataConvert(convert, DBTYPE_UI2, DBTYPE_WSTR, 0, &dst_len, src, dst, sizeof(dst), 0, &dst_status, 0, 0, 0);
1210 ok(hr == S_OK, "got %08x\n", hr);
1211 ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
1212 ok(dst_len == 8, "got %d\n", dst_len);
1213 ok(!lstrcmpW(dst, fourthreetwoone), "got %s\n", wine_dbgstr_w(dst));
1215 memset(src, 0, sizeof(src));
1216 *(unsigned int *)src = 4321;
1217 hr = IDataConvert_DataConvert(convert, DBTYPE_UI4, DBTYPE_WSTR, 0, &dst_len, src, dst, sizeof(dst), 0, &dst_status, 0, 0, 0);
1218 ok(hr == S_OK, "got %08x\n", hr);
1219 ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
1220 ok(dst_len == 8, "got %d\n", dst_len);
1221 ok(!lstrcmpW(dst, fourthreetwoone), "got %s\n", wine_dbgstr_w(dst));
1223 memset(src, 0, sizeof(src));
1224 ((LARGE_INTEGER*)src)->QuadPart = 4321;
1225 hr = IDataConvert_DataConvert(convert, DBTYPE_I8, DBTYPE_WSTR, 0, &dst_len, src, dst, sizeof(dst), 0, &dst_status, 0, 0, 0);
1226 ok(hr == S_OK, "got %08x\n", hr);
1227 ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
1228 ok(dst_len == 8, "got %d\n", dst_len);
1229 ok(!lstrcmpW(dst, fourthreetwoone), "got %s\n", wine_dbgstr_w(dst));
1231 memset(src, 0, sizeof(src));
1232 ((ULARGE_INTEGER*)src)->QuadPart = 4321;
1233 hr = IDataConvert_DataConvert(convert, DBTYPE_UI8, DBTYPE_WSTR, 0, &dst_len, src, dst, sizeof(dst), 0, &dst_status, 0, 0, 0);
1234 ok(hr == S_OK, "got %08x\n", hr);
1235 ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
1236 ok(dst_len == 8, "got %d\n", dst_len);
1237 ok(!lstrcmpW(dst, fourthreetwoone), "got %s\n", wine_dbgstr_w(dst));
1241 memset(src, 0, sizeof(src));
1242 memcpy(src, &IID_IDataConvert, sizeof(GUID));
1243 memset(dst, 0xcc, sizeof(dst));
1244 hr = IDataConvert_DataConvert(convert, DBTYPE_GUID, DBTYPE_WSTR, 0, &dst_len, src, &dst, sizeof(dst), 0, &dst_status, 0, 0, 0);
1245 ok(hr == S_OK, "got %08x\n", hr);
1246 ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
1247 ok(dst_len == 76, "got %d\n", dst_len);
1248 ok(!lstrcmpW(dst, guid_str), "got %s\n", wine_dbgstr_w(dst));
1252 b = SysAllocString(ten);
1253 *(BSTR *)src = b;
1254 hr = IDataConvert_DataConvert(convert, DBTYPE_BSTR, DBTYPE_WSTR, 0, &dst_len, src, dst, sizeof(dst), 0, &dst_status, 0, 0, 0);
1255 ok(hr == S_OK, "got %08x\n", hr);
1256 ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
1257 ok(dst_len == 4, "got %d\n", dst_len);
1258 ok(!lstrcmpW(b, dst), "got %s\n", wine_dbgstr_w(dst));
1259 SysFreeString(b);
1261 memcpy(src, ten, sizeof(ten));
1262 hr = IDataConvert_DataConvert(convert, DBTYPE_WSTR, DBTYPE_WSTR, 2, &dst_len, src, dst, sizeof(dst), 0, &dst_status, 0, 0, 0);
1263 ok(hr == S_OK, "got %08x\n", hr);
1264 ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
1265 ok(dst_len == 2, "got %d\n", dst_len);
1266 ok(dst[0] == '1', "got %02x\n", dst[0]);
1267 ok(dst[1] == 0, "got %02x\n", dst[1]);
1269 memcpy(src, ten, sizeof(ten));
1270 hr = IDataConvert_DataConvert(convert, DBTYPE_WSTR, DBTYPE_WSTR, 4, &dst_len, src, dst, sizeof(dst), 0, &dst_status, 0, 0, 0);
1271 ok(hr == S_OK, "got %08x\n", hr);
1272 ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
1273 ok(dst_len == 4, "got %d\n", dst_len);
1274 ok(!lstrcmpW(ten, dst), "got %s\n", wine_dbgstr_w(dst));
1276 memcpy(src, ten, sizeof(ten));
1277 hr = IDataConvert_DataConvert(convert, DBTYPE_WSTR, DBTYPE_WSTR, 0, &dst_len, src, dst, sizeof(dst), 0, &dst_status, 0, 0, DBDATACONVERT_LENGTHFROMNTS);
1278 ok(hr == S_OK, "got %08x\n", hr);
1279 ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
1280 ok(dst_len == 4, "got %d\n", dst_len);
1281 ok(!lstrcmpW(ten, dst), "got %s\n", wine_dbgstr_w(dst));
1285 /* DBTYPE_BYTES to DBTYPE_*STR unpacks binary data into a hex string */
1286 memcpy(src, hexpacked_w, sizeof(hexpacked_w));
1287 memset(dst, 0xcc, sizeof(dst));
1288 hr = IDataConvert_DataConvert(convert, DBTYPE_BYTES, DBTYPE_WSTR, sizeof(hexpacked_w), &dst_len, src, dst, sizeof(dst), 0, &dst_status, 0, 0, 0);
1289 ok(hr == S_OK, "got %08x\n", hr);
1290 ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
1291 ok(dst_len == sizeof(hexpacked_w) * 4, "got %d\n", dst_len);
1292 ok(!lstrcmpW(hexunpacked_w, dst), "got %s\n", wine_dbgstr_w(dst));
1293 ok(dst[sizeof(hexpacked_w)/sizeof(WCHAR) * 4 + 1] == 0xcccc, "clobbered buffer\n");
1295 memcpy(src, hexpacked_w, sizeof(hexpacked_w));
1296 memset(dst, 0xcc, sizeof(dst));
1297 hr = IDataConvert_DataConvert(convert, DBTYPE_BYTES, DBTYPE_WSTR, 0, &dst_len, src, dst, sizeof(dst), 0, &dst_status, 0, 0, 0);
1298 ok(hr == S_OK, "got %08x\n", hr);
1299 ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
1300 ok(dst_len == 0, "got %d\n", dst_len);
1301 ok(dst[0] == 0, "not null terminated\n");
1302 ok(dst[1] == 0xcccc, "clobbered buffer\n");
1304 memcpy(src, hexpacked_w, sizeof(hexpacked_w));
1305 memset(dst, 0xcc, sizeof(dst));
1306 hr = IDataConvert_DataConvert(convert, DBTYPE_BYTES, DBTYPE_WSTR, 4, &dst_len, src, dst, sizeof(dst), 0, &dst_status, 0, 0, 0);
1307 ok(hr == S_OK, "got %08x\n", hr);
1308 ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
1309 ok(dst_len == 2 * sizeof(WCHAR) * 4, "got %d\n", dst_len);
1310 ok(!memcmp(hexunpacked_w, dst, 2 * sizeof(WCHAR) * 4 ), "got %s\n", wine_dbgstr_w(dst));
1311 ok(dst[2 * 4] == 0, "not null terminated\n");
1312 ok(dst[2 * 4 + 1] == 0xcccc, "clobbered buffer\n");
1314 memcpy(src, hexpacked_w, sizeof(hexpacked_w));
1315 memset(dst, 0xcc, sizeof(dst));
1316 hr = IDataConvert_DataConvert(convert, DBTYPE_BYTES, DBTYPE_WSTR, sizeof(hexpacked_w), &dst_len, src, dst, 2 * sizeof(WCHAR) * 4 + sizeof(WCHAR), 0, &dst_status, 0, 0, 0);
1317 ok(hr == S_OK, "got %08x\n", hr);
1318 ok(dst_status == DBSTATUS_S_TRUNCATED, "got %08x\n", dst_status);
1319 ok(dst_len == sizeof(hexpacked_w) * 4, "got %d\n", dst_len);
1320 ok(!memcmp(hexunpacked_w, dst, 2 * sizeof(WCHAR) * 4 ), "got %s\n", wine_dbgstr_w(dst));
1321 ok(dst[2 * 4] == 0, "not null terminated\n");
1322 ok(dst[2 * 4 + 1] == 0xcccc, "clobbered buffer\n");
1324 memcpy(src, hexpacked_w, sizeof(hexpacked_w));
1325 memset(dst, 0xcc, sizeof(dst));
1326 hr = IDataConvert_DataConvert(convert, DBTYPE_BYTES, DBTYPE_WSTR, sizeof(hexpacked_w), &dst_len, src, dst, 2 * sizeof(WCHAR) * 4 +1, 0, &dst_status, 0, 0, 0);
1327 ok(hr == S_OK, "got %08x\n", hr);
1328 ok(dst_status == DBSTATUS_S_TRUNCATED, "got %08x\n", dst_status);
1329 ok(dst_len == sizeof(hexpacked_w) * 4, "got %d\n", dst_len);
1330 ok(!memcmp(hexunpacked_w, dst, 2 * sizeof(WCHAR) * 4 - 2 ), "got %s\n", wine_dbgstr_w(dst));
1331 ok(dst[2 * 4 - 1] == 0, "not null terminated\n");
1332 ok(dst[2 * 4] == 0xcccc, "clobbered buffer\n");
1334 memcpy(src, hexpacked_w, sizeof(hexpacked_w));
1335 memset(dst, 0xcc, sizeof(dst));
1336 hr = IDataConvert_DataConvert(convert, DBTYPE_BYTES, DBTYPE_WSTR, sizeof(hexpacked_w), &dst_len, src, dst, 2 * sizeof(WCHAR) * 4, 0, &dst_status, 0, 0, 0);
1337 ok(hr == S_OK, "got %08x\n", hr);
1338 ok(dst_status == DBSTATUS_S_TRUNCATED, "got %08x\n", dst_status);
1339 ok(dst_len == sizeof(hexpacked_w) * 4, "got %d\n", dst_len);
1340 ok(!memcmp(hexunpacked_w, dst, 2 * sizeof(WCHAR) * 4 - 2 ), "got %s\n", wine_dbgstr_w(dst));
1341 ok(dst[2 * 4 - 1] == 0, "not null terminated\n");
1342 ok(dst[2 * 4] == 0xcccc, "clobbered buffer\n");
1344 memcpy(src, hexpacked_w, sizeof(hexpacked_w));
1345 memset(dst, 0xcc, sizeof(dst));
1346 hr = IDataConvert_DataConvert(convert, DBTYPE_BYTES, DBTYPE_WSTR, 0, &dst_len, src, dst, sizeof(dst), 0, &dst_status, 0, 0, DBDATACONVERT_LENGTHFROMNTS);
1347 ok(hr == S_OK, "got %08x\n", hr);
1348 ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
1349 ok(dst_len == 0, "got %d\n", dst_len);
1350 ok(dst[0] == 0, "not null terminated\n");
1351 ok(dst[1] == 0xcccc, "clobbered buffer\n");
1354 IDataConvert_Release(convert);
1357 static void test_converttostr(void)
1359 IDataConvert *convert;
1360 HRESULT hr;
1361 char dst[100];
1362 BYTE src[64];
1363 DBSTATUS dst_status;
1364 DBLENGTH dst_len;
1365 static const WCHAR ten[] = {'1','0',0};
1366 static const char ten_a[] = "10";
1367 static const char fourthreetwoone[] = "4321";
1368 static const char guid_str[] = "{0C733A8D-2A1C-11CE-ADE5-00AA0044773D}";
1369 static const char hexunpacked_a[] = "57696E6500";
1370 static const char hexpacked_a[] = "Wine";
1371 BSTR b;
1373 hr = CoCreateInstance(&CLSID_OLEDB_CONVERSIONLIBRARY, NULL, CLSCTX_INPROC_SERVER, &IID_IDataConvert, (void**)&convert);
1374 if(FAILED(hr))
1376 win_skip("Unable to load oledb conversion library\n");
1377 return;
1381 memset(dst, 0xcc, sizeof(dst));
1382 hr = IDataConvert_DataConvert(convert, DBTYPE_EMPTY, DBTYPE_STR, 0, &dst_len, src, dst, sizeof(dst), 0, &dst_status, 0, 0, 0);
1383 ok(hr == S_OK, "got %08x\n", hr);
1384 ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
1385 ok(dst_len == 0, "got %d\n", dst_len);
1386 ok(dst[0] == 0, "got %02x\n", dst[0]);
1387 ok(dst[1] == (char)0xcc, "got %02x\n", dst[1]);
1389 memset(dst, 0xcc, sizeof(dst));
1390 hr = IDataConvert_DataConvert(convert, DBTYPE_NULL, DBTYPE_STR, 0, &dst_len, src, dst, sizeof(dst), 0, &dst_status, 0, 0, 0);
1391 ok(hr == DB_E_UNSUPPORTEDCONVERSION, "got %08x\n", hr);
1392 ok(dst_status == DBSTATUS_E_BADACCESSOR, "got %08x\n", dst_status);
1393 ok(dst_len == 0, "got %d\n", dst_len);
1394 ok(dst[0] == (char)0xcc, "got %02x\n", dst[0]);
1396 *(short *)src = 4321;
1397 hr = IDataConvert_DataConvert(convert, DBTYPE_I2, DBTYPE_STR, 0, &dst_len, src, dst, sizeof(dst), 0, &dst_status, 0, 0, 0);
1398 ok(hr == S_OK, "got %08x\n", hr);
1399 ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
1400 ok(dst_len == 4, "got %d\n", dst_len);
1401 ok(!lstrcmpA(dst, fourthreetwoone), "got %s\n", dst);
1403 *(short *)src = 4321;
1404 memset(dst, 0xcc, sizeof(dst));
1405 hr = IDataConvert_DataConvert(convert, DBTYPE_I2, DBTYPE_STR, 0, &dst_len, src, dst, 0, 0, &dst_status, 0, 0, 0);
1406 ok(hr == DB_E_ERRORSOCCURRED, "got %08x\n", hr);
1407 ok(dst_status == DBSTATUS_E_DATAOVERFLOW, "got %08x\n", dst_status);
1408 ok(dst_len == 4, "got %d\n", dst_len);
1409 ok(dst[0] == (char)0xcc, "got %02x\n", dst[0]);
1411 *(short *)src = 4321;
1412 memset(dst, 0xcc, sizeof(dst));
1413 hr = IDataConvert_DataConvert(convert, DBTYPE_I2, DBTYPE_STR, 0, &dst_len, src, NULL, 0, 0, &dst_status, 0, 0, 0);
1414 ok(hr == S_OK, "got %08x\n", hr);
1415 ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
1416 ok(dst_len == 4, "got %d\n", dst_len);
1417 ok(dst[0] == (char)0xcc, "got %02x\n", dst[0]);
1419 *(short *)src = 4321;
1420 memset(dst, 0xcc, sizeof(dst));
1421 hr = IDataConvert_DataConvert(convert, DBTYPE_I2, DBTYPE_STR, 0, &dst_len, src, dst, 2, 0, &dst_status, 0, 0, 0);
1422 ok(hr == S_OK, "got %08x\n", hr);
1423 ok(dst_status == DBSTATUS_S_TRUNCATED, "got %08x\n", dst_status);
1424 ok(dst_len == 4, "got %d\n", dst_len);
1425 ok(dst[0] == '4', "got %02x\n", dst[0]);
1426 ok(dst[1] == 0, "got %02x\n", dst[1]);
1427 ok(dst[2] == (char)0xcc, "got %02x\n", dst[2]);
1429 *(short *)src = 4321;
1430 memset(dst, 0xcc, sizeof(dst));
1431 hr = IDataConvert_DataConvert(convert, DBTYPE_I2, DBTYPE_STR, 0, &dst_len, src, dst, 1, 0, &dst_status, 0, 0, 0);
1432 ok(hr == S_OK, "got %08x\n", hr);
1433 ok(dst_status == DBSTATUS_S_TRUNCATED, "got %08x\n", dst_status);
1434 ok(dst_len == 4, "got %d\n", dst_len);
1435 ok(dst[0] == 0, "got %02x\n", dst[0]);
1436 ok(dst[1] == (char)0xcc, "got %02x\n", dst[1]);
1438 *(short *)src = 4321;
1439 memset(dst, 0xcc, sizeof(dst));
1440 hr = IDataConvert_DataConvert(convert, DBTYPE_I2, DBTYPE_STR, 0, &dst_len, src, dst, 4, 0, &dst_status, 0, 0, 0);
1441 ok(hr == S_OK, "got %08x\n", hr);
1442 ok(dst_status == DBSTATUS_S_TRUNCATED, "got %08x\n", dst_status);
1443 ok(dst_len == 4, "got %d\n", dst_len);
1444 ok(dst[0] == '4', "got %02x\n", dst[0]);
1445 ok(dst[1] == '3', "got %02x\n", dst[1]);
1446 ok(dst[2] == '2', "got %02x\n", dst[2]);
1447 ok(dst[3] == 0, "got %02x\n", dst[3]);
1448 ok(dst[4] == (char)0xcc, "got %02x\n", dst[4]);
1451 *(int *)src = 4321;
1452 hr = IDataConvert_DataConvert(convert, DBTYPE_I4, DBTYPE_STR, 0, &dst_len, src, dst, sizeof(dst), 0, &dst_status, 0, 0, 0);
1453 ok(hr == S_OK, "got %08x\n", hr);
1454 ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
1455 ok(dst_len == 4, "got %d\n", dst_len);
1456 ok(!lstrcmpA(dst, fourthreetwoone), "got %s\n", dst);
1458 *(int *)src = 4321;
1459 memset(dst, 0xcc, sizeof(dst));
1460 hr = IDataConvert_DataConvert(convert, DBTYPE_I4, DBTYPE_STR, 0, &dst_len, src, dst, 0, 0, &dst_status, 0, 0, 0);
1461 ok(hr == DB_E_ERRORSOCCURRED, "got %08x\n", hr);
1462 ok(dst_status == DBSTATUS_E_DATAOVERFLOW, "got %08x\n", dst_status);
1463 ok(dst_len == 4, "got %d\n", dst_len);
1464 ok(dst[0] == (char)0xcc, "got %02x\n", dst[0]);
1466 *(int *)src = 4321;
1467 memset(dst, 0xcc, sizeof(dst));
1468 hr = IDataConvert_DataConvert(convert, DBTYPE_I4, DBTYPE_STR, 0, &dst_len, src, NULL, 0, 0, &dst_status, 0, 0, 0);
1469 ok(hr == S_OK, "got %08x\n", hr);
1470 ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
1471 ok(dst_len == 4, "got %d\n", dst_len);
1472 ok(dst[0] == (char)0xcc, "got %02x\n", dst[0]);
1474 *(int *)src = 4321;
1475 memset(dst, 0xcc, sizeof(dst));
1476 hr = IDataConvert_DataConvert(convert, DBTYPE_I4, DBTYPE_STR, 0, &dst_len, src, dst, 2, 0, &dst_status, 0, 0, 0);
1477 ok(hr == S_OK, "got %08x\n", hr);
1478 ok(dst_status == DBSTATUS_S_TRUNCATED, "got %08x\n", dst_status);
1479 ok(dst_len == 4, "got %d\n", dst_len);
1480 ok(dst[0] == '4', "got %02x\n", dst[0]);
1481 ok(dst[1] == 0, "got %02x\n", dst[1]);
1482 ok(dst[2] == (char)0xcc, "got %02x\n", dst[2]);
1484 *(int *)src = 4321;
1485 memset(dst, 0xcc, sizeof(dst));
1486 hr = IDataConvert_DataConvert(convert, DBTYPE_I4, DBTYPE_STR, 0, &dst_len, src, dst, 1, 0, &dst_status, 0, 0, 0);
1487 ok(hr == S_OK, "got %08x\n", hr);
1488 ok(dst_status == DBSTATUS_S_TRUNCATED, "got %08x\n", dst_status);
1489 ok(dst_len == 4, "got %d\n", dst_len);
1490 ok(dst[0] == 0, "got %02x\n", dst[0]);
1491 ok(dst[1] == (char)0xcc, "got %02x\n", dst[1]);
1493 *(int *)src = 4321;
1494 memset(dst, 0xcc, sizeof(dst));
1495 hr = IDataConvert_DataConvert(convert, DBTYPE_I4, DBTYPE_STR, 0, &dst_len, src, dst, 4, 0, &dst_status, 0, 0, 0);
1496 ok(hr == S_OK, "got %08x\n", hr);
1497 ok(dst_status == DBSTATUS_S_TRUNCATED, "got %08x\n", dst_status);
1498 ok(dst_len == 4, "got %d\n", dst_len);
1499 ok(dst[0] == '4', "got %02x\n", dst[0]);
1500 ok(dst[1] == '3', "got %02x\n", dst[1]);
1501 ok(dst[2] == '2', "got %02x\n", dst[2]);
1502 ok(dst[3] == 0, "got %02x\n", dst[3]);
1503 ok(dst[4] == (char)0xcc, "got %02x\n", dst[4]);
1506 *(float *)src = 4321;
1507 hr = IDataConvert_DataConvert(convert, DBTYPE_R4, DBTYPE_STR, 0, &dst_len, src, dst, sizeof(dst), 0, &dst_status, 0, 0, 0);
1508 ok(hr == S_OK, "got %08x\n", hr);
1509 ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
1510 ok(dst_len == 4, "got %d\n", dst_len);
1511 ok(!lstrcmpA(dst, fourthreetwoone), "got %s\n", dst);
1513 *(float *)src = 4321;
1514 memset(dst, 0xcc, sizeof(dst));
1515 hr = IDataConvert_DataConvert(convert, DBTYPE_R4, DBTYPE_STR, 0, &dst_len, src, dst, 0, 0, &dst_status, 0, 0, 0);
1516 ok(hr == DB_E_ERRORSOCCURRED, "got %08x\n", hr);
1517 ok(dst_status == DBSTATUS_E_DATAOVERFLOW, "got %08x\n", dst_status);
1518 ok(dst_len == 4, "got %d\n", dst_len);
1519 ok(dst[0] == (char)0xcc, "got %02x\n", dst[0]);
1521 *(float *)src = 4321;
1522 memset(dst, 0xcc, sizeof(dst));
1523 hr = IDataConvert_DataConvert(convert, DBTYPE_R4, DBTYPE_STR, 0, &dst_len, src, NULL, 0, 0, &dst_status, 0, 0, 0);
1524 ok(hr == S_OK, "got %08x\n", hr);
1525 ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
1526 ok(dst_len == 4, "got %d\n", dst_len);
1527 ok(dst[0] == (char)0xcc, "got %02x\n", dst[0]);
1529 *(float *)src = 4321;
1530 memset(dst, 0xcc, sizeof(dst));
1531 hr = IDataConvert_DataConvert(convert, DBTYPE_R4, DBTYPE_STR, 0, &dst_len, src, dst, 2, 0, &dst_status, 0, 0, 0);
1532 ok(hr == S_OK, "got %08x\n", hr);
1533 ok(dst_status == DBSTATUS_S_TRUNCATED, "got %08x\n", dst_status);
1534 ok(dst_len == 4, "got %d\n", dst_len);
1535 ok(dst[0] == '4', "got %02x\n", dst[0]);
1536 ok(dst[1] == 0, "got %02x\n", dst[1]);
1537 ok(dst[2] == (char)0xcc, "got %02x\n", dst[2]);
1539 *(float *)src = 4321;
1540 memset(dst, 0xcc, sizeof(dst));
1541 hr = IDataConvert_DataConvert(convert, DBTYPE_R4, DBTYPE_STR, 0, &dst_len, src, dst, 1, 0, &dst_status, 0, 0, 0);
1542 ok(hr == S_OK, "got %08x\n", hr);
1543 ok(dst_status == DBSTATUS_S_TRUNCATED, "got %08x\n", dst_status);
1544 ok(dst_len == 4, "got %d\n", dst_len);
1545 ok(dst[0] == 0, "got %02x\n", dst[0]);
1546 ok(dst[1] == (char)0xcc, "got %02x\n", dst[1]);
1548 *(float *)src = 4321;
1549 memset(dst, 0xcc, sizeof(dst));
1550 hr = IDataConvert_DataConvert(convert, DBTYPE_R4, DBTYPE_STR, 0, &dst_len, src, dst, 4, 0, &dst_status, 0, 0, 0);
1551 ok(hr == S_OK, "got %08x\n", hr);
1552 ok(dst_status == DBSTATUS_S_TRUNCATED, "got %08x\n", dst_status);
1553 ok(dst_len == 4, "got %d\n", dst_len);
1554 ok(dst[0] == '4', "got %02x\n", dst[0]);
1555 ok(dst[1] == '3', "got %02x\n", dst[1]);
1556 ok(dst[2] == '2', "got %02x\n", dst[2]);
1557 ok(dst[3] == 0, "got %02x\n", dst[3]);
1558 ok(dst[4] == (char)0xcc, "got %02x\n", dst[4]);
1561 *(double *)src = 4321;
1562 hr = IDataConvert_DataConvert(convert, DBTYPE_R8, DBTYPE_STR, 0, &dst_len, src, dst, sizeof(dst), 0, &dst_status, 0, 0, 0);
1563 ok(hr == S_OK, "got %08x\n", hr);
1564 ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
1565 ok(dst_len == 4, "got %d\n", dst_len);
1566 ok(!lstrcmpA(dst, fourthreetwoone), "got %s\n", dst);
1568 *(double *)src = 4321;
1569 memset(dst, 0xcc, sizeof(dst));
1570 hr = IDataConvert_DataConvert(convert, DBTYPE_R8, DBTYPE_STR, 0, &dst_len, src, dst, 0, 0, &dst_status, 0, 0, 0);
1571 ok(hr == DB_E_ERRORSOCCURRED, "got %08x\n", hr);
1572 ok(dst_status == DBSTATUS_E_DATAOVERFLOW, "got %08x\n", dst_status);
1573 ok(dst_len == 4, "got %d\n", dst_len);
1574 ok(dst[0] == (char)0xcc, "got %02x\n", dst[0]);
1576 *(double *)src = 4321;
1577 memset(dst, 0xcc, sizeof(dst));
1578 hr = IDataConvert_DataConvert(convert, DBTYPE_R8, DBTYPE_STR, 0, &dst_len, src, NULL, 0, 0, &dst_status, 0, 0, 0);
1579 ok(hr == S_OK, "got %08x\n", hr);
1580 ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
1581 ok(dst_len == 4, "got %d\n", dst_len);
1582 ok(dst[0] == (char)0xcc, "got %02x\n", dst[0]);
1584 *(double *)src = 4321;
1585 memset(dst, 0xcc, sizeof(dst));
1586 hr = IDataConvert_DataConvert(convert, DBTYPE_R8, DBTYPE_STR, 0, &dst_len, src, dst, 2, 0, &dst_status, 0, 0, 0);
1587 ok(hr == S_OK, "got %08x\n", hr);
1588 ok(dst_status == DBSTATUS_S_TRUNCATED, "got %08x\n", dst_status);
1589 ok(dst_len == 4, "got %d\n", dst_len);
1590 ok(dst[0] == '4', "got %02x\n", dst[0]);
1591 ok(dst[1] == 0, "got %02x\n", dst[1]);
1592 ok(dst[2] == (char)0xcc, "got %02x\n", dst[2]);
1594 *(double *)src = 4321;
1595 memset(dst, 0xcc, sizeof(dst));
1596 hr = IDataConvert_DataConvert(convert, DBTYPE_R8, DBTYPE_STR, 0, &dst_len, src, dst, 1, 0, &dst_status, 0, 0, 0);
1597 ok(hr == S_OK, "got %08x\n", hr);
1598 ok(dst_status == DBSTATUS_S_TRUNCATED, "got %08x\n", dst_status);
1599 ok(dst_len == 4, "got %d\n", dst_len);
1600 ok(dst[0] == 0, "got %02x\n", dst[0]);
1601 ok(dst[1] == (char)0xcc, "got %02x\n", dst[1]);
1603 *(double *)src = 4321;
1604 memset(dst, 0xcc, sizeof(dst));
1605 hr = IDataConvert_DataConvert(convert, DBTYPE_R8, DBTYPE_STR, 0, &dst_len, src, dst, 4, 0, &dst_status, 0, 0, 0);
1606 ok(hr == S_OK, "got %08x\n", hr);
1607 ok(dst_status == DBSTATUS_S_TRUNCATED, "got %08x\n", dst_status);
1608 ok(dst_len == 4, "got %d\n", dst_len);
1609 ok(dst[0] == '4', "got %02x\n", dst[0]);
1610 ok(dst[1] == '3', "got %02x\n", dst[1]);
1611 ok(dst[2] == '2', "got %02x\n", dst[2]);
1612 ok(dst[3] == 0, "got %02x\n", dst[3]);
1613 ok(dst[4] == (char)0xcc, "got %02x\n", dst[4]);
1617 memset(src, 0, sizeof(src));
1618 ((CY*)src)->int64 = 43210000;
1619 memset(dst, 0xcc, sizeof(dst));
1620 hr = IDataConvert_DataConvert(convert, DBTYPE_CY, DBTYPE_STR, 0, &dst_len, src, dst, sizeof(dst), 0, &dst_status, 0, 0, 0);
1621 ok(hr == S_OK, "got %08x\n", hr);
1622 ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
1623 ok(dst_len == 4, "got %d\n", dst_len);
1624 ok(!lstrcmpA(dst, fourthreetwoone), "got %s\n", dst);
1628 memset(src, 0, sizeof(src));
1629 *(signed char *)src = 10;
1630 hr = IDataConvert_DataConvert(convert, DBTYPE_I1, DBTYPE_STR, 0, &dst_len, src, dst, sizeof(dst), 0, &dst_status, 0, 0, 0);
1631 ok(hr == S_OK, "got %08x\n", hr);
1632 ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
1633 ok(dst_len == 2, "got %d\n", dst_len);
1634 ok(!lstrcmpA(dst, ten_a), "got %s\n", dst);
1636 memset(src, 0, sizeof(src));
1637 *(unsigned char *)src = 10;
1638 hr = IDataConvert_DataConvert(convert, DBTYPE_UI1, DBTYPE_STR, 0, &dst_len, src, dst, sizeof(dst), 0, &dst_status, 0, 0, 0);
1639 ok(hr == S_OK, "got %08x\n", hr);
1640 ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
1641 ok(dst_len == 2, "got %d\n", dst_len);
1642 ok(!lstrcmpA(dst, ten_a), "got %s\n", dst);
1644 memset(src, 0, sizeof(src));
1645 *(unsigned short *)src = 4321;
1646 hr = IDataConvert_DataConvert(convert, DBTYPE_UI2, DBTYPE_STR, 0, &dst_len, src, dst, sizeof(dst), 0, &dst_status, 0, 0, 0);
1647 ok(hr == S_OK, "got %08x\n", hr);
1648 ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
1649 ok(dst_len == 4, "got %d\n", dst_len);
1650 ok(!lstrcmpA(dst, fourthreetwoone), "got %s\n", dst);
1652 memset(src, 0, sizeof(src));
1653 *(unsigned int *)src = 4321;
1654 hr = IDataConvert_DataConvert(convert, DBTYPE_UI4, DBTYPE_STR, 0, &dst_len, src, dst, sizeof(dst), 0, &dst_status, 0, 0, 0);
1655 ok(hr == S_OK, "got %08x\n", hr);
1656 ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
1657 ok(dst_len == 4, "got %d\n", dst_len);
1658 ok(!lstrcmpA(dst, fourthreetwoone), "got %s\n", dst);
1660 memset(src, 0, sizeof(src));
1661 ((LARGE_INTEGER*)src)->QuadPart = 4321;
1662 hr = IDataConvert_DataConvert(convert, DBTYPE_I8, DBTYPE_STR, 0, &dst_len, src, dst, sizeof(dst), 0, &dst_status, 0, 0, 0);
1663 ok(hr == S_OK, "got %08x\n", hr);
1664 ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
1665 ok(dst_len == 4, "got %d\n", dst_len);
1666 ok(!lstrcmpA(dst, fourthreetwoone), "got %s\n", dst);
1668 memset(src, 0, sizeof(src));
1669 ((ULARGE_INTEGER*)src)->QuadPart = 4321;
1670 hr = IDataConvert_DataConvert(convert, DBTYPE_UI8, DBTYPE_STR, 0, &dst_len, src, dst, sizeof(dst), 0, &dst_status, 0, 0, 0);
1671 ok(hr == S_OK, "got %08x\n", hr);
1672 ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
1673 ok(dst_len == 4, "got %d\n", dst_len);
1674 ok(!lstrcmpA(dst, fourthreetwoone), "got %s\n", dst);
1678 memset(src, 0, sizeof(src));
1679 memcpy(src, &IID_IDataConvert, sizeof(GUID));
1680 memset(dst, 0xcc, sizeof(dst));
1681 hr = IDataConvert_DataConvert(convert, DBTYPE_GUID, DBTYPE_STR, 0, &dst_len, src, &dst, sizeof(dst), 0, &dst_status, 0, 0, 0);
1682 ok(hr == S_OK, "got %08x\n", hr);
1683 ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
1684 ok(dst_len == 38, "got %d\n", dst_len);
1685 ok(!lstrcmpA(dst, guid_str), "got %s\n", dst);
1689 b = SysAllocString(ten);
1690 *(BSTR *)src = b;
1691 memset(dst, 0xcc, sizeof(dst));
1692 hr = IDataConvert_DataConvert(convert, DBTYPE_BSTR, DBTYPE_STR, 0, &dst_len, src, dst, sizeof(dst), 0, &dst_status, 0, 0, 0);
1693 ok(hr == S_OK, "got %08x\n", hr);
1694 ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
1695 ok(dst_len == 2, "got %d\n", dst_len);
1696 ok(!lstrcmpA(ten_a, dst), "got %s\n", dst);
1697 SysFreeString(b);
1699 memcpy(src, ten, sizeof(ten));
1700 memset(dst, 0xcc, sizeof(dst));
1701 hr = IDataConvert_DataConvert(convert, DBTYPE_WSTR, DBTYPE_STR, 2, &dst_len, src, dst, sizeof(dst), 0, &dst_status, 0, 0, 0);
1702 ok(hr == S_OK, "got %08x\n", hr);
1703 ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
1704 ok(dst_len == 1, "got %d\n", dst_len);
1705 ok(dst[0] == '1', "got %02x\n", dst[0]);
1706 ok(dst[1] == 0, "got %02x\n", dst[1]);
1708 memcpy(src, ten, sizeof(ten));
1709 memset(dst, 0xcc, sizeof(dst));
1710 hr = IDataConvert_DataConvert(convert, DBTYPE_WSTR, DBTYPE_STR, 4, &dst_len, src, dst, sizeof(dst), 0, &dst_status, 0, 0, 0);
1711 ok(hr == S_OK, "got %08x\n", hr);
1712 ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
1713 ok(dst_len == 2, "got %d\n", dst_len);
1714 ok(!lstrcmpA(ten_a, dst), "got %s\n", dst);
1716 memcpy(src, ten, sizeof(ten));
1717 memset(dst, 0xcc, sizeof(dst));
1718 hr = IDataConvert_DataConvert(convert, DBTYPE_WSTR, DBTYPE_STR, 0, &dst_len, src, dst, sizeof(dst), 0, &dst_status, 0, 0, DBDATACONVERT_LENGTHFROMNTS);
1719 ok(hr == S_OK, "got %08x\n", hr);
1720 ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
1721 ok(dst_len == 2, "got %d\n", dst_len);
1722 ok(!lstrcmpA(ten_a, dst), "got %s\n", dst);
1724 memcpy(src, ten_a, sizeof(ten_a));
1725 memset(dst, 0xcc, sizeof(dst));
1726 hr = IDataConvert_DataConvert(convert, DBTYPE_STR, DBTYPE_STR, 2, &dst_len, src, dst, sizeof(dst), 0, &dst_status, 0, 0, 0);
1727 ok(hr == S_OK, "got %08x\n", hr);
1728 ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
1729 ok(dst_len == 2, "got %d\n", dst_len);
1730 ok(dst[0] == '1', "got %02x\n", dst[0]);
1731 ok(dst[1] == '0', "got %02x\n", dst[1]);
1732 ok(dst[2] == 0, "got %02x\n", dst[2]);
1733 ok(dst[3] == (char)0xcc, "got %02x\n", dst[3]);
1735 memcpy(src, ten_a, sizeof(ten_a));
1736 memset(dst, 0xcc, sizeof(dst));
1737 hr = IDataConvert_DataConvert(convert, DBTYPE_STR, DBTYPE_STR, 4, &dst_len, src, dst, sizeof(dst), 0, &dst_status, 0, 0, 0);
1738 ok(hr == S_OK, "got %08x\n", hr);
1739 ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
1740 ok(dst_len == 4, "got %d\n", dst_len);
1741 ok(!lstrcmpA(ten_a, dst), "got %s\n", dst);
1743 memcpy(src, ten_a, sizeof(ten_a));
1744 memset(dst, 0xcc, sizeof(dst));
1745 hr = IDataConvert_DataConvert(convert, DBTYPE_STR, DBTYPE_STR, 0, &dst_len, src, dst, sizeof(dst), 0, &dst_status, 0, 0, DBDATACONVERT_LENGTHFROMNTS);
1746 ok(hr == S_OK, "got %08x\n", hr);
1747 ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
1748 ok(dst_len == 2, "got %d\n", dst_len);
1749 ok(!lstrcmpA(ten_a, dst), "got %s\n", dst);
1753 /* DBTYPE_BYTES to DBTYPE_*STR unpacks binary data into a hex string */
1754 memcpy(src, hexpacked_a, sizeof(hexpacked_a));
1755 memset(dst, 0xcc, sizeof(dst));
1756 hr = IDataConvert_DataConvert(convert, DBTYPE_BYTES, DBTYPE_STR, sizeof(hexpacked_a), &dst_len, src, dst, sizeof(dst), 0, &dst_status, 0, 0, 0);
1757 ok(hr == S_OK, "got %08x\n", hr);
1758 ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
1759 ok(dst_len == sizeof(hexpacked_a) * 2, "got %d\n", dst_len);
1760 ok(!lstrcmpA(hexunpacked_a, dst), "got %s\n", dst);
1761 ok(dst[sizeof(hexpacked_a)/sizeof(char) * 4 + 1] == (char)0xcc, "clobbered buffer\n");
1763 memcpy(src, hexpacked_a, sizeof(hexpacked_a));
1764 memset(dst, 0xcc, sizeof(dst));
1765 hr = IDataConvert_DataConvert(convert, DBTYPE_BYTES, DBTYPE_STR, 0, &dst_len, src, dst, sizeof(dst), 0, &dst_status, 0, 0, 0);
1766 ok(hr == S_OK, "got %08x\n", hr);
1767 ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
1768 ok(dst_len == 0, "got %d\n", dst_len);
1769 ok(dst[0] == 0, "not null terminated\n");
1770 ok(dst[1] == (char)0xcc, "clobbered buffer\n");
1772 memcpy(src, hexpacked_a, sizeof(hexpacked_a));
1773 memset(dst, 0xcc, sizeof(dst));
1774 hr = IDataConvert_DataConvert(convert, DBTYPE_BYTES, DBTYPE_STR, 4, &dst_len, src, dst, sizeof(dst), 0, &dst_status, 0, 0, 0);
1775 ok(hr == S_OK, "got %08x\n", hr);
1776 ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
1777 ok(dst_len == 2 * sizeof(char) * 4, "got %d\n", dst_len);
1778 ok(!memcmp(hexunpacked_a, dst, 2 * sizeof(char) * 4 ), "got %s\n", dst);
1779 ok(dst[2 * 4] == 0, "not null terminated\n");
1780 ok(dst[2 * 4 + 1] == (char)0xcc, "clobbered buffer\n");
1782 memcpy(src, hexpacked_a, sizeof(hexpacked_a));
1783 memset(dst, 0xcc, sizeof(dst));
1784 hr = IDataConvert_DataConvert(convert, DBTYPE_BYTES, DBTYPE_STR, sizeof(hexpacked_a), &dst_len, src, dst, 2 * sizeof(char) * 4 + sizeof(char), 0, &dst_status, 0, 0, 0);
1785 ok(hr == S_OK, "got %08x\n", hr);
1786 ok(dst_status == DBSTATUS_S_TRUNCATED, "got %08x\n", dst_status);
1787 ok(dst_len == sizeof(hexpacked_a) * 2, "got %d\n", dst_len);
1788 ok(!memcmp(hexunpacked_a, dst, 2 * sizeof(char) * 4 ), "got %s\n", dst);
1789 ok(dst[2 * 4] == 0, "not null terminated\n");
1790 ok(dst[2 * 4 + 1] == (char)0xcc, "clobbered buffer\n");
1792 memcpy(src, hexpacked_a, sizeof(hexpacked_a));
1793 memset(dst, 0xcc, sizeof(dst));
1794 hr = IDataConvert_DataConvert(convert, DBTYPE_BYTES, DBTYPE_STR, sizeof(hexpacked_a), &dst_len, src, dst, 2 * sizeof(char) * 4, 0, &dst_status, 0, 0, 0);
1795 ok(hr == S_OK, "got %08x\n", hr);
1796 ok(dst_status == DBSTATUS_S_TRUNCATED, "got %08x\n", dst_status);
1797 ok(dst_len == sizeof(hexpacked_a) * 2, "got %d\n", dst_len);
1798 ok(!memcmp(hexunpacked_a, dst, 2 * sizeof(char) * 4 - 2 ), "got %s\n", dst);
1799 ok(dst[2 * 4 - 1] == 0, "not null terminated\n");
1800 ok(dst[2 * 4] == (char)0xcc, "clobbered buffer\n");
1802 memcpy(src, hexpacked_a, sizeof(hexpacked_a));
1803 memset(dst, 0xcc, sizeof(dst));
1804 hr = IDataConvert_DataConvert(convert, DBTYPE_BYTES, DBTYPE_STR, 0, &dst_len, src, dst, sizeof(dst), 0, &dst_status, 0, 0, DBDATACONVERT_LENGTHFROMNTS);
1805 ok(hr == S_OK, "got %08x\n", hr);
1806 ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
1807 ok(dst_len == 0, "got %d\n", dst_len);
1808 ok(dst[0] == 0, "not null terminated\n");
1809 ok(dst[1] == (char)0xcc, "clobbered buffer\n");
1811 IDataConvert_Release(convert);
1814 static void test_converttobyrefwstr(void)
1816 IDataConvert *convert;
1817 HRESULT hr;
1818 WCHAR *dst;
1819 BYTE src[20];
1820 DBSTATUS dst_status;
1821 DBLENGTH dst_len;
1822 static const WCHAR ten[] = {'1','0',0};
1823 static const WCHAR fourthreetwoone[] = {'4','3','2','1',0};
1824 BSTR b;
1826 hr = CoCreateInstance(&CLSID_OLEDB_CONVERSIONLIBRARY, NULL, CLSCTX_INPROC_SERVER, &IID_IDataConvert, (void**)&convert);
1827 if(FAILED(hr))
1829 win_skip("Unable to load oledb conversion library\n");
1830 return;
1833 hr = IDataConvert_DataConvert(convert, DBTYPE_EMPTY, DBTYPE_BYREF | DBTYPE_WSTR, 0, &dst_len, src, &dst, sizeof(dst), 0, &dst_status, 0, 0, 0);
1834 ok(hr == S_OK, "got %08x\n", hr);
1835 ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
1836 ok(dst_len == 0, "got %d\n", dst_len);
1837 ok(dst[0] == 0, "got %04x\n", dst[0]);
1838 CoTaskMemFree(dst);
1840 dst = (void*)0x12345678;
1841 hr = IDataConvert_DataConvert(convert, DBTYPE_NULL, DBTYPE_BYREF | DBTYPE_WSTR, 0, &dst_len, src, &dst, sizeof(dst), 0, &dst_status, 0, 0, 0);
1842 ok(hr == DB_E_UNSUPPORTEDCONVERSION, "got %08x\n", hr);
1843 ok(dst_status == DBSTATUS_E_BADACCESSOR, "got %08x\n", dst_status);
1844 ok(dst_len == 0, "got %d\n", dst_len);
1845 ok(dst == (void*)0x12345678, "got %p\n", dst);
1847 *(short *)src = 4321;
1848 hr = IDataConvert_DataConvert(convert, DBTYPE_I2, DBTYPE_BYREF | DBTYPE_WSTR, 0, &dst_len, src, &dst, sizeof(dst), 0, &dst_status, 0, 0, 0);
1849 ok(hr == S_OK, "got %08x\n", hr);
1850 ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
1851 ok(dst_len == 8, "got %d\n", dst_len);
1852 ok(!lstrcmpW(dst, fourthreetwoone), "got %s\n", wine_dbgstr_w(dst));
1853 CoTaskMemFree(dst);
1855 *(short *)src = 4321;
1856 hr = IDataConvert_DataConvert(convert, DBTYPE_I2, DBTYPE_BYREF | DBTYPE_WSTR, 0, &dst_len, src, &dst, 0, 0, &dst_status, 0, 0, 0);
1857 ok(hr == S_OK, "got %08x\n", hr);
1858 ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
1859 ok(dst_len == 8, "got %d\n", dst_len);
1860 ok(!lstrcmpW(dst, fourthreetwoone), "got %s\n", wine_dbgstr_w(dst));
1861 CoTaskMemFree(dst);
1863 b = SysAllocString(ten);
1864 *(BSTR *)src = b;
1865 hr = IDataConvert_DataConvert(convert, DBTYPE_BSTR, DBTYPE_BYREF | DBTYPE_WSTR, 0, &dst_len, src, &dst, sizeof(dst), 0, &dst_status, 0, 0, 0);
1866 ok(hr == S_OK, "got %08x\n", hr);
1867 ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
1868 ok(dst_len == 4, "got %d\n", dst_len);
1869 ok(!lstrcmpW(b, dst), "got %s\n", wine_dbgstr_w(dst));
1870 CoTaskMemFree(dst);
1871 SysFreeString(b);
1873 memcpy(src, ten, sizeof(ten));
1874 hr = IDataConvert_DataConvert(convert, DBTYPE_WSTR, DBTYPE_BYREF | DBTYPE_WSTR, 2, &dst_len, src, &dst, sizeof(dst), 0, &dst_status, 0, 0, 0);
1875 ok(hr == S_OK, "got %08x\n", hr);
1876 ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
1877 ok(dst_len == 2, "got %d\n", dst_len);
1878 ok(dst[0] == '1', "got %02x\n", dst[0]);
1879 ok(dst[1] == 0, "got %02x\n", dst[1]);
1880 CoTaskMemFree(dst);
1882 memcpy(src, ten, sizeof(ten));
1883 hr = IDataConvert_DataConvert(convert, DBTYPE_WSTR, DBTYPE_BYREF | DBTYPE_WSTR, 4, &dst_len, src, &dst, sizeof(dst), 0, &dst_status, 0, 0, 0);
1884 ok(hr == S_OK, "got %08x\n", hr);
1885 ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
1886 ok(dst_len == 4, "got %d\n", dst_len);
1887 ok(!lstrcmpW(ten, dst), "got %s\n", wine_dbgstr_w(dst));
1888 CoTaskMemFree(dst);
1890 memcpy(src, ten, sizeof(ten));
1891 hr = IDataConvert_DataConvert(convert, DBTYPE_WSTR, DBTYPE_BYREF | DBTYPE_WSTR, 0, &dst_len, src, &dst, sizeof(dst), 0, &dst_status, 0, 0, DBDATACONVERT_LENGTHFROMNTS);
1892 ok(hr == S_OK, "got %08x\n", hr);
1893 ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
1894 ok(dst_len == 4, "got %d\n", dst_len);
1895 ok(!lstrcmpW(ten, dst), "got %s\n", wine_dbgstr_w(dst));
1896 CoTaskMemFree(dst);
1898 IDataConvert_Release(convert);
1901 static void test_converttoguid(void)
1903 IDataConvert *convert;
1904 HRESULT hr;
1905 GUID dst;
1906 BYTE src[20];
1907 DBSTATUS dst_status;
1908 DBLENGTH dst_len;
1910 hr = CoCreateInstance(&CLSID_OLEDB_CONVERSIONLIBRARY, NULL, CLSCTX_INPROC_SERVER, &IID_IDataConvert, (void**)&convert);
1911 if(FAILED(hr))
1913 win_skip("Unable to load oledb conversion library\n");
1914 return;
1917 dst = IID_IDCInfo;
1918 hr = IDataConvert_DataConvert(convert, DBTYPE_EMPTY, DBTYPE_GUID, 0, &dst_len, src, &dst, sizeof(dst), 0, &dst_status, 0, 0, 0);
1919 ok(hr == S_OK, "got %08x\n", hr);
1920 ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
1921 ok(dst_len == sizeof(GUID), "got %d\n", dst_len);
1922 ok(IsEqualGUID(&dst, &GUID_NULL), "didn't get GUID_NULL\n");
1924 dst = IID_IDCInfo;
1925 hr = IDataConvert_DataConvert(convert, DBTYPE_NULL, DBTYPE_GUID, 0, &dst_len, src, &dst, sizeof(dst), 0, &dst_status, 0, 0, 0);
1926 ok(hr == DB_E_UNSUPPORTEDCONVERSION, "got %08x\n", hr);
1927 ok(dst_status == DBSTATUS_E_BADACCESSOR, "got %08x\n", dst_status);
1928 ok(dst_len == sizeof(GUID), "got %d\n", dst_len);
1929 ok(IsEqualGUID(&dst, &IID_IDCInfo), "dst has changed\n");
1931 dst = IID_IDCInfo;
1932 memcpy(src, &IID_IDataConvert, sizeof(GUID));
1933 hr = IDataConvert_DataConvert(convert, DBTYPE_GUID, DBTYPE_GUID, 0, &dst_len, src, &dst, sizeof(dst), 0, &dst_status, 0, 0, 0);
1934 ok(hr == S_OK, "got %08x\n", hr);
1935 ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
1936 ok(dst_len == sizeof(GUID), "got %d\n", dst_len);
1937 ok(IsEqualGUID(&dst, &IID_IDataConvert), "didn't get IID_IDataConvert\n");
1939 IDataConvert_Release(convert);
1942 static void test_converttofiletime(void)
1944 IDataConvert *convert;
1945 HRESULT hr;
1946 FILETIME dst;
1947 BYTE src[20];
1948 DBSTATUS dst_status;
1949 DBLENGTH dst_len;
1951 hr = CoCreateInstance(&CLSID_OLEDB_CONVERSIONLIBRARY, NULL, CLSCTX_INPROC_SERVER, &IID_IDataConvert, (void**)&convert);
1952 if(FAILED(hr))
1954 win_skip("Unable to load oledb conversion library\n");
1955 return;
1958 memset(&dst, 0xcc, sizeof(dst));
1959 ((FILETIME *)src)->dwLowDateTime = 0x12345678;
1960 ((FILETIME *)src)->dwHighDateTime = 0x9abcdef0;
1961 hr = IDataConvert_DataConvert(convert, DBTYPE_FILETIME, DBTYPE_FILETIME, 0, &dst_len, src, &dst, sizeof(dst), 0, &dst_status, 0, 0, 0);
1962 ok(hr == S_OK ||
1963 broken(hr == DB_E_BADBINDINFO), /* win98 */
1964 "got %08x\n", hr);
1965 if(SUCCEEDED(hr))
1967 ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
1968 ok(dst_len == sizeof(dst), "got %d\n", dst_len);
1969 ok(dst.dwLowDateTime == 0x12345678, "got %08x\n", dst.dwLowDateTime);
1970 ok(dst.dwHighDateTime == 0x9abcdef0, "got %08x\n", dst.dwHighDateTime);
1973 IDataConvert_Release(convert);
1976 static void test_converttoui1(void)
1978 IDataConvert *convert;
1979 HRESULT hr;
1980 BYTE dst;
1981 BYTE src[20];
1982 DBSTATUS dst_status;
1983 DBLENGTH dst_len;
1985 hr = CoCreateInstance(&CLSID_OLEDB_CONVERSIONLIBRARY, NULL, CLSCTX_INPROC_SERVER, &IID_IDataConvert, (void**)&convert);
1986 if(FAILED(hr))
1988 win_skip("Unable to load oledb conversion library\n");
1989 return;
1992 dst = 0x12;
1993 hr = IDataConvert_DataConvert(convert, DBTYPE_EMPTY, DBTYPE_UI1, 0, &dst_len, src, &dst, sizeof(dst), 0, &dst_status, 0, 0, 0);
1994 ok(hr == S_OK, "got %08x\n", hr);
1995 ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
1996 ok(dst_len == sizeof(dst), "got %d\n", dst_len);
1997 ok(dst == 0, "got %08x\n", dst);
1999 dst = 0x12;
2000 hr = IDataConvert_DataConvert(convert, DBTYPE_NULL, DBTYPE_UI1, 0, &dst_len, src, &dst, sizeof(dst), 0, &dst_status, 0, 0, 0);
2001 ok(hr == DB_E_UNSUPPORTEDCONVERSION, "got %08x\n", hr);
2002 ok(dst_status == DBSTATUS_E_BADACCESSOR, "got %08x\n", dst_status);
2003 ok(dst_len == sizeof(dst), "got %d\n", dst_len);
2004 ok(dst == 0x12, "got %08x\n", dst);
2006 dst = 0x12;
2007 src[0] = 0x43;
2008 hr = IDataConvert_DataConvert(convert, DBTYPE_UI1, DBTYPE_UI1, 0, &dst_len, src, &dst, sizeof(dst), 0, &dst_status, 0, 0, 0);
2009 ok(hr == S_OK, "got %08x\n", hr);
2010 ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
2011 ok(dst_len == sizeof(dst), "got %d\n", dst_len);
2012 ok(dst == 0x43, "got %08x\n", dst);
2014 dst = 0x12;
2015 src[0] = 0xfe;
2016 hr = IDataConvert_DataConvert(convert, DBTYPE_UI1, DBTYPE_UI1, 0, &dst_len, src, &dst, sizeof(dst), 0, &dst_status, 0, 0, 0);
2017 ok(hr == S_OK, "got %08x\n", hr);
2018 ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
2019 ok(dst_len == sizeof(dst), "got %d\n", dst_len);
2020 ok(dst == 0xfe, "got %08x\n", dst);
2022 IDataConvert_Release(convert);
2025 static void test_converttoui4(void)
2027 IDataConvert *convert;
2028 HRESULT hr;
2029 DWORD dst;
2030 BYTE src[20];
2031 DBSTATUS dst_status;
2032 DBLENGTH dst_len;
2034 hr = CoCreateInstance(&CLSID_OLEDB_CONVERSIONLIBRARY, NULL, CLSCTX_INPROC_SERVER, &IID_IDataConvert, (void**)&convert);
2035 if(FAILED(hr))
2037 win_skip("Unable to load oledb conversion library\n");
2038 return;
2041 dst = 0x12345678;
2042 hr = IDataConvert_DataConvert(convert, DBTYPE_EMPTY, DBTYPE_UI4, 0, &dst_len, src, &dst, sizeof(dst), 0, &dst_status, 0, 0, 0);
2043 ok(hr == S_OK, "got %08x\n", hr);
2044 ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
2045 ok(dst_len == sizeof(dst), "got %d\n", dst_len);
2046 ok(dst == 0, "got %08x\n", dst);
2048 dst = 0x12345678;
2049 hr = IDataConvert_DataConvert(convert, DBTYPE_NULL, DBTYPE_UI4, 0, &dst_len, src, &dst, sizeof(dst), 0, &dst_status, 0, 0, 0);
2050 ok(hr == DB_E_UNSUPPORTEDCONVERSION, "got %08x\n", hr);
2051 ok(dst_status == DBSTATUS_E_BADACCESSOR, "got %08x\n", dst_status);
2052 ok(dst_len == sizeof(dst), "got %d\n", dst_len);
2053 ok(dst == 0x12345678, "got %08x\n", dst);
2055 dst = 0x12345678;
2056 *(DWORD*)src = 0x87654321;
2057 hr = IDataConvert_DataConvert(convert, DBTYPE_UI4, DBTYPE_UI4, 0, &dst_len, src, &dst, sizeof(dst), 0, &dst_status, 0, 0, 0);
2058 ok(hr == S_OK, "got %08x\n", hr);
2059 ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
2060 ok(dst_len == sizeof(dst), "got %d\n", dst_len);
2061 ok(dst == 0x87654321, "got %08x\n", dst);
2063 dst = 0x12345678;
2064 *(signed short *)src = 0x4321;
2065 hr = IDataConvert_DataConvert(convert, DBTYPE_I2, DBTYPE_UI4, 0, &dst_len, src, &dst, sizeof(dst), 0, &dst_status, 0, 0, 0);
2066 ok(hr == S_OK, "got %08x\n", hr);
2067 ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
2068 ok(dst_len == sizeof(dst), "got %d\n", dst_len);
2069 ok(dst == 0x4321, "got %08x\n", dst);
2071 dst = 0x12345678;
2072 *(signed short *)src = -1;
2073 hr = IDataConvert_DataConvert(convert, DBTYPE_I2, DBTYPE_UI4, 0, &dst_len, src, &dst, sizeof(dst), 0, &dst_status, 0, 0, 0);
2074 ok(hr == DB_E_ERRORSOCCURRED, "got %08x\n", hr);
2075 todo_wine
2076 ok(dst_status == DBSTATUS_E_SIGNMISMATCH, "got %08x\n", dst_status);
2077 ok(dst_len == sizeof(dst), "got %d\n", dst_len);
2078 ok(dst == 0x12345678, "got %08x\n", dst);
2080 IDataConvert_Release(convert);
2083 static void test_converttor4(void)
2085 IDataConvert *convert;
2086 HRESULT hr;
2087 FLOAT dst;
2088 BYTE src[20];
2089 DBSTATUS dst_status;
2090 DBLENGTH dst_len;
2092 hr = CoCreateInstance(&CLSID_OLEDB_CONVERSIONLIBRARY, NULL, CLSCTX_INPROC_SERVER, &IID_IDataConvert, (void**)&convert);
2093 if(FAILED(hr))
2095 win_skip("Unable to load oledb conversion library\n");
2096 return;
2099 dst = 1.0;
2100 hr = IDataConvert_DataConvert(convert, DBTYPE_EMPTY, DBTYPE_R4, 0, &dst_len, src, &dst, sizeof(dst), 0, &dst_status, 0, 0, 0);
2101 ok(hr == S_OK, "got %08x\n", hr);
2102 ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
2103 ok(dst_len == sizeof(dst), "got %d\n", dst_len);
2104 ok(dst == 0.0, "got %f\n", dst);
2106 dst = 1.0;
2107 hr = IDataConvert_DataConvert(convert, DBTYPE_NULL, DBTYPE_R4, 0, &dst_len, src, &dst, sizeof(dst), 0, &dst_status, 0, 0, 0);
2108 ok(hr == DB_E_UNSUPPORTEDCONVERSION, "got %08x\n", hr);
2109 ok(dst_status == DBSTATUS_E_BADACCESSOR, "got %08x\n", dst_status);
2110 ok(dst_len == sizeof(dst), "got %d\n", dst_len);
2111 ok(dst == 1.0, "got %f\n", dst);
2113 dst = 1.0;
2114 *(signed int*)src = 12345678;
2115 hr = IDataConvert_DataConvert(convert, DBTYPE_I4, DBTYPE_R4, 0, &dst_len, src, &dst, sizeof(dst), 0, &dst_status, 0, 0, 0);
2116 ok(hr == S_OK, "got %08x\n", hr);
2117 ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
2118 ok(dst_len == sizeof(dst), "got %d\n", dst_len);
2119 ok(dst == 12345678.0, "got %f\n", dst);
2121 dst = 1.0;
2122 *(FLOAT *)src = 10.0;
2123 hr = IDataConvert_DataConvert(convert, DBTYPE_R4, DBTYPE_R4, 0, &dst_len, src, &dst, sizeof(dst), 0, &dst_status, 0, 0, 0);
2124 ok(hr == S_OK, "got %08x\n", hr);
2125 ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
2126 ok(dst_len == sizeof(dst), "got %d\n", dst_len);
2127 ok(dst == 10.0, "got %f\n", dst);
2129 IDataConvert_Release(convert);
2132 static void test_converttocy(void)
2134 IDataConvert *convert;
2135 HRESULT hr;
2136 CY dst;
2137 BYTE src[20];
2138 DBSTATUS dst_status;
2139 DBLENGTH dst_len;
2141 hr = CoCreateInstance(&CLSID_OLEDB_CONVERSIONLIBRARY, NULL, CLSCTX_INPROC_SERVER, &IID_IDataConvert, (void**)&convert);
2142 if(FAILED(hr))
2144 win_skip("Unable to load oledb conversion library\n");
2145 return;
2148 dst.int64 = 0xcc;
2149 hr = IDataConvert_DataConvert(convert, DBTYPE_EMPTY, DBTYPE_CY, 0, &dst_len, src, &dst, sizeof(dst), 0, &dst_status, 0, 0, 0);
2150 ok(hr == S_OK, "got %08x\n", hr);
2151 ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
2152 ok(dst_len == sizeof(CY), "got %d\n", dst_len);
2153 ok(dst.int64 == 0, "didn't get 0\n");
2155 dst.int64 = 0xcc;
2156 hr = IDataConvert_DataConvert(convert, DBTYPE_NULL, DBTYPE_CY, 0, &dst_len, src, &dst, sizeof(dst), 0, &dst_status, 0, 0, 0);
2157 ok(hr == DB_E_UNSUPPORTEDCONVERSION, "got %08x\n", hr);
2158 ok(dst_status == DBSTATUS_E_BADACCESSOR, "got %08x\n", dst_status);
2159 ok(dst_len == sizeof(CY), "got %d\n", dst_len);
2160 ok(dst.int64 == 0xcc, "dst changed\n");
2162 dst.int64 = 0xcc;
2163 *(int*)src = 1234;
2164 hr = IDataConvert_DataConvert(convert, DBTYPE_I4, DBTYPE_CY, 0, &dst_len, src, &dst, sizeof(dst), 0, &dst_status, 0, 0, 0);
2165 ok(hr == S_OK, "got %08x\n", hr);
2166 ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
2167 ok(dst_len == sizeof(CY), "got %d\n", dst_len);
2168 ok(dst.int64 == 12340000, "got %d\n", dst.s.Lo);
2170 dst.int64 = 0xcc;
2171 ((CY*)src)->int64 = 1234;
2172 hr = IDataConvert_DataConvert(convert, DBTYPE_CY, DBTYPE_CY, 0, &dst_len, src, &dst, sizeof(dst), 0, &dst_status, 0, 0, 0);
2173 ok(hr == S_OK, "got %08x\n", hr);
2174 ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
2175 ok(dst_len == sizeof(CY), "got %d\n", dst_len);
2176 ok(dst.int64 == 1234, "got %d\n", dst.s.Lo);
2178 IDataConvert_Release(convert);
2181 static void test_converttoui8(void)
2183 IDataConvert *convert;
2184 HRESULT hr;
2185 ULARGE_INTEGER dst;
2186 BYTE src[20];
2187 DBSTATUS dst_status;
2188 DBLENGTH dst_len;
2190 hr = CoCreateInstance(&CLSID_OLEDB_CONVERSIONLIBRARY, NULL, CLSCTX_INPROC_SERVER, &IID_IDataConvert, (void**)&convert);
2191 if(FAILED(hr))
2193 win_skip("Unable to load oledb conversion library\n");
2194 return;
2197 dst.QuadPart = 0xcc;
2198 hr = IDataConvert_DataConvert(convert, DBTYPE_EMPTY, DBTYPE_UI8, 0, &dst_len, src, &dst, sizeof(dst), 0, &dst_status, 0, 0, 0);
2199 ok(hr == S_OK, "got %08x\n", hr);
2200 ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
2201 ok(dst_len == sizeof(dst), "got %d\n", dst_len);
2202 ok(dst.QuadPart == 0, "got %d\n", (int)dst.QuadPart);
2204 dst.QuadPart = 0xcc;
2205 hr = IDataConvert_DataConvert(convert, DBTYPE_NULL, DBTYPE_UI8, 0, &dst_len, src, &dst, sizeof(dst), 0, &dst_status, 0, 0, 0);
2206 ok(hr == DB_E_UNSUPPORTEDCONVERSION, "got %08x\n", hr);
2207 ok(dst_status == DBSTATUS_E_BADACCESSOR, "got %08x\n", dst_status);
2208 ok(dst_len == sizeof(dst), "got %d\n", dst_len);
2209 ok(dst.QuadPart == 0xcc, "dst changed\n");
2211 dst.QuadPart = 0xcc;
2212 *(int*)src = 1234;
2213 hr = IDataConvert_DataConvert(convert, DBTYPE_I4, DBTYPE_UI8, 0, &dst_len, src, &dst, sizeof(dst), 0, &dst_status, 0, 0, 0);
2214 ok(hr == S_OK, "got %08x\n", hr);
2215 ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
2216 ok(dst_len == sizeof(dst), "got %d\n", dst_len);
2217 ok(dst.QuadPart == 1234, "got %d\n", (int)dst.QuadPart);
2219 dst.QuadPart = 0xcc;
2220 *(int*)src = -1234;
2221 hr = IDataConvert_DataConvert(convert, DBTYPE_I4, DBTYPE_UI8, 0, &dst_len, src, &dst, sizeof(dst), 0, &dst_status, 0, 0, 0);
2222 ok(hr == DB_E_ERRORSOCCURRED, "got %08x\n", hr);
2223 todo_wine
2224 ok(dst_status == DBSTATUS_E_SIGNMISMATCH, "got %08x\n", dst_status);
2225 ok(dst_len == sizeof(dst), "got %d\n", dst_len);
2226 ok(dst.QuadPart == 0xcc, "got %d\n", (int)dst.QuadPart);
2228 dst.QuadPart = 0xcc;
2229 ((ULARGE_INTEGER*)src)->QuadPart = 1234;
2230 hr = IDataConvert_DataConvert(convert, DBTYPE_UI8, DBTYPE_UI8, 0, &dst_len, src, &dst, sizeof(dst), 0, &dst_status, 0, 0, 0);
2231 ok(hr == S_OK, "got %08x\n", hr);
2232 ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
2233 ok(dst_len == sizeof(dst), "got %d\n", dst_len);
2234 ok(dst.QuadPart == 1234, "got %d\n", (int)dst.QuadPart);
2236 IDataConvert_Release(convert);
2239 START_TEST(convert)
2241 OleInitialize(NULL);
2242 test_dcinfo();
2243 test_canconvert();
2244 test_converttoi2();
2245 test_converttoi4();
2246 test_converttostr();
2247 test_converttobstr();
2248 test_converttowstr();
2249 test_converttobyrefwstr();
2250 test_converttoguid();
2251 test_converttoui1();
2252 test_converttoui4();
2253 test_converttor4();
2254 test_converttofiletime();
2255 test_converttocy();
2256 test_converttoui8();
2257 OleUninitialize();