void TestSafeArray() { // 创建COM对象实例 IMarshalSafeArrayPtr comObj(__uuidof(MarshalSafeArrayObj)); if (comObj) { // 创建SafeArray SAFEARRAY* pIntArray; SAFEARRAYBOUND saBnd[1]; saBnd[0].lLbound = 0; saBnd[0].cElements = 5; pIntArray = SafeArrayCreate(VT_I4, 1, saBnd); // 初始化SafeArray int* pArray; SafeArrayAccessData(pIntArray, (void HUGEP**)&pArray); pArray[0] = 0; pArray[1] = 1; pArray[2] = 2; pArray[3] = 3; pArray[4] = 4; SafeArrayUnaccessData(pIntArray); wprintf(L"(0) 初始化数组\n"); PrintIntArray(pIntArray); int result = 0; result = comObj->IntArrayUpdateByVal(pIntArray); wprintf(L"元素和:%d\n\n", result); wprintf(L"(1) 调用方法 IntArrayUpdateByVal\n"); PrintIntArray(pIntArray); result = comObj->IntArrayUpdateByValInOut(pIntArray); wprintf(L"元素和:%d\n\n", result); wprintf(L"(2) 调用方法 IntArrayUpdateByValInOut\n"); PrintIntArray(pIntArray); result = comObj->IntArrayUpdateByRef(&pIntArray); wprintf(L"元素和:%d\n\n", result); wprintf(L"(3) 调用方法 IntArrayUpdateByRef\n"); PrintIntArray(pIntArray); result = comObj->IntArrayUpdateByRefInOnly(&pIntArray); wprintf(L"元素和:%d\n\n", result); wprintf(L"(4) 调用方法 IntArrayUpdateByRefInOnly\n"); PrintIntArray(pIntArray); // 释放SafeArray SafeArrayDestroy(pIntArray); SAFEARRAY* pNewArray = comObj->IntArrayReturn(5); wprintf(L"\n(5) 调用方法 IntArrayReturn:\n"); PrintIntArray(pNewArray); // 释放SafeArray SafeArrayDestroy(pNewArray); comObj.Release(); } }
//Sort an array of integers of a given size and print the //array each time an element is moved void insertionSort(int ar_size, int * ar) { int i; int j; for(i=0;i<ar_size;i++) { j=i; while((j > 0) && ar[j-1] > ar[j]) { int tempvar; tempvar = ar[j]; ar[j] = ar[j-1]; ar[j-1] = tempvar; j--; } if(i) PrintIntArray(ar_size, ar); } }
int main() { uint32_t PrimeCeiling; printf(" ---Instructions---\n\n"); printf("The Sieve of a Eratosthenes is an algorithm for finding\nprime numbers that is over 2,000 years old. Enter an\ninteger greater than 2 and press enter to return\na list of prime numbers smaller than the one you typed.\n\n"); printf("Give me a number: "); scanf("%u", &PrimeCeiling); while(1) { if(PrimeCeiling < 3) { printf("Number must be 2 greater than 2!\n"); printf("Give me a number: "); scanf("%u", &PrimeCeiling); } else { uint32_t *PrimesList = malloc(PrimeCeiling * sizeof(uint32_t)); if(PrimesList == NULL) { printf("Memory error!\n"); break; } uint32_t PrimeCount = Sieve(PrimeCeiling, PrimesList, PrimeCeiling * sizeof(uint32_t)); PrintIntArray(PrimesList, PrimeCount); printf("\nNumber of primes found was %u.\n", PrimeCount); float PercentPrimes = ((float)PrimeCount / (float)PrimeCeiling) * 100; printf("%.2f%% of numbers between 0 and %u are prime.\n", PercentPrimes, PrimeCeiling); break; } } return 0; }