online stats
顯示具有 程式語言 標籤的文章。 顯示所有文章
顯示具有 程式語言 標籤的文章。 顯示所有文章

【程式語言】User環境執行BCB程式缺少Library的問題

0 意見

一般來說,在User環境執行BCB程式時,可能會碰到
缺少Library的狀況。
處理方式有兩種…


A. 從開發環境,將缺少的Library補足,可能缺少的元件有:
vcl60.bpl
rtl60.bpl
borlndmm.dll
stlpmt45.dll
CC3260MT.DLL
或直接安裝Borland C++ 6 Runtime Library

B. 在Compiler時注意下列設定…




read more...

【程式語言】Data segment share in a DLL

0 意見

【C++】
依MS網站上的說明,利用#pragma data_seg將需要共用的Variant包在裡面後,
這些變數在DLL Load時會被配置在相同的記憶體,若已配置,則不會再重新配置,
所以不同的程式在使用此Variant時,均是處理同一塊記憶體,藉此達到Variant共用的效果。
需注意的是,這些共用的Variant在宣告時,需給予初始值才能生效;同時不建議
以此方式共享指標或陣列,這可能造成程式中斷。


#pragma data_seg("Shared")
int iSharedVar = 0;
#pragma data_seg()
#pragma comment(linker, "/SECTION:Shared,RWS")

參考資料:
How to specify both shared data and non-shared data in a DLL in Visual C++
範例:
How to share a data segment in a DLL

read more...

【程式語言】Split String

0 意見

【C++】

#include "stdafx.h"
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <conio.h>

char **funcSplit(char* iString, int* iCounter, char * iDelimiter)
{
    char TmpStr[255];
    char* TmpPointer;
    char** TmpStrList = 0;
    int TmpIdx = 0;
    int TmpNOE = 0;
   
    strcpy(TmpStr, iString);
    TmpPointer = strtok(TmpStr, iDelimiter);
    while (TmpPointer != 0 ) {
        TmpStrList = (char**) realloc(TmpStrList, (TmpIdx + 1) * sizeof(char*));
        TmpStrList[TmpIdx] = (char*) malloc((strlen(TmpPointer) + 1));
        strcpy(TmpStrList[TmpIdx], TmpPointer);
        ++TmpIdx;
        TmpPointer = strtok(NULL, iDelimiter);
    }
    *iCounter = TmpIdx;
    return TmpStrList;
}

// Example
int _tmain(int argc, _TCHAR* argv[])
{
//    char TmpStr[255] = "one, two, tree, four,five  six;seven;eight, nine";
    char *TmpStr = "one, two, tree, four,five  six;seven;eight, nine";
    int TmpCounter = 0;
    int TmpIdx = 0;

    char ** TmpStrList = funcSplit( TmpStr, &TmpCounter, " ,;");
    for (TmpIdx = 0; TmpIdx < TmpCounter; ++TmpIdx)
       printf("%s\n", TmpStrList[TmpIdx]);

    for (TmpIdx = 0; TmpIdx < TmpCounter; ++TmpIdx)
       free(TmpStrList[TmpIdx]);

    free(TmpStrList);
    getch();
    return 0;
}



【Delphi】

function funcSplitStr(iSpliter: String; iSourceStr: String): TStrings;
var
    TmpPos: Integer;
    TmpStrList: TStringList;
    TmpStr: String;
begin
    TmpStrList := TStringList.Create;
    TmpPos := pos(iSpliter, iSourceStr);
   
    while (TmpPos > 0) do
    begin
        TmpStr := copy(iSourceStr, 1, (TmpPos - 1));
        TmpStrList.Add(TmpStr);
        iSourceStr := copy (iSourceStr , (TmpPos + Length(iSpliter)), (Length(iSourceStr) - TmpPos - Length(iSpliter) + 1));
        TmpPos := pos(iSpliter, iSourceStr);
    end ;
    TmpStrList.Add(iSourceStr);
   
    Result := TmpStrList;
end;



read more...