• xdebug with XAMPP on Mac OS X

    $svn co svn://svn.xdebug.org/svn/xdebug/xdebug/trunk xdebug
    $cd xdebug
    $/Applications/XAMPP/xamppfiles/bin/phpize
    $./configure --enable-xdebug \
    --with-php-config=/Applications/XAMPP/xamppfiles/bin/php-config \
    CFLAGS="-arch i386 $CFLAGS" CCFLAGS="-arch i386 $CCFLAGS" \
    CXXFLAGS="-arch i386 $CXXFLAGS" LDFLAGS="-arch i386 $LDFLAGS"
    $make
    $sudo cp modules/* /Applications/XAMPP/xamppfiles/lib/php/php-5.3.1/extensions/no-debug-non-zts-20090626/
    $sudo vi /Applications/XAMPP/etc/php.ini
    
    [xdebug]
    zend_extension=/Applications/XAMPP/xamppfiles//lib/php/php-5.3.1/extensions/no-debug-non-zts-20090626/xdebug.so
    xdebug.remote_enable=on
    xdebug.remote_handler=dbgp
    xdebug.remote_host=127.0.0.1
    xdebug.remote_port=9000

    http://blog.laaz.org/tech/2010/08/27/xdebug-with-xampp-on-mac-os-x/

    2011.12.30 / no responses / Category: MAC, OS

  • ติดตั้ง oci8 ใน XAMPP for Mac OS X 1.7.3

    0.ติดตั้ง xcode ก่อน
    1.ดาวน์โหลด xampp สำหรับ mac โดยดาวน์โหลดทั้ง XAMPP Mac OS X 1.7.3 และ Developer package
    2.ติดตั้งโปรแกรม

    ติดตั้ง oci8

    1.ดาวน์โหลด และ ติดตั้ง Oracle Instant Client Basic และ SDK ที่เป็น 32 bit
    URL http://www.oracle.com/technology/software/tech/oci/instantclient/htdocs/macsoft.html
    -Oracle Instant Client วางไว้ใน /usr/local/oracle ก็ได้
    -SDK วาง folder sdk ไว้ใน /usr/local/oracle
    -ใน fodler Oracle Instant Client
    ln -s libclntsh.dylib.10.1 libclntsh.dylib
    ln -s libclntsh.dylib libclntsh.so

    2.export CFLAGS=”-arch i386″

    3./Applications/XAMPP/xamppfiles/bin/pecl install oci8
    ตอนถาม path ให้ระบุ path ที่วาง Oracle Instant Client ไว้ เช่น instantclient,/usr/local/oracle

    4.แก้ไขแฟ้ม /Applications/XAMPP/xamppfiles/etc/php.ini
    เพิ่ม extension=oci8.so

    5.แก้ไขแฟ้ม /Applications/XAMPP/xamppfiles/bin/envvars
    DYLD_LIBRARY_PATH=”/Applications/XAMPP/xamppfiles/lib:/usr/local/oracle:$DYLD_LIBRARY_PATH”
    export DYLD_LIBRARY_PATH

    6.restart apache

    REF http://www.apachefriends.org/en/xampp-macosx.html

    2011.12.30 / no responses / Category: MAC, OS

  •  วิธีติดตั้ง tomcat 6 บน mac leopard

    mac leopard มี java ติดตั้งมาแล้วดังนั้นสามารถดาวน์โหลด tomcat แบบ tar.gz มาติดตั้งได้เลย
    แต่ถ้าจะติดตั้งให้รันได้แบบ  service ต้องมีการทำขั้นตอนดัง URL ด้านล่างนี้

    http://www.malisphoto.com/tips/tomcatonosx.html

    2011.04.18 / no responses / Category: MAC, Programming, โปรแกรมน่าใช้

  • IE toolbar button with ATL Com

    วิธีการสร้าง Browser Helper Objects (BHO) ด้วย Visual Studio

    วิธีการสร้าง Toolbar สำหรับ Internet Explorer

    กระดานสนทนาสำหรับการพัฒนา Internet Explorer Extension

    การสร้าง Popup menu

    การ Deploy DLL สำหรับ Extension ที่สร้างด้วย ATL Com

    1.เปลี่ยนตรง Build เป็น Release

    2.แยกแฟ้ม manifest ออกจาก DLL
    Project->Properties->Configuration Properties
    Manifest Tool -> Input and Output
    Embed Manifest เปลี่ยนจาก Yes เป็น NO

    3.เปลี่ยนเป็น Static Link to ATL หรือ MFC
    Project->Properties->Configuration Properties -> General
    Use of ATL เปลี่ยนเป็น Static Link to ATL
    กรณีใช้ MFC ด้วย ให้เลือก Use of MFC เปลี่ยนเป็น Use MFC in a Static Library

    4.Rebuild

    2011.01.23 / no responses / Category: Programming

  • เปิดการทำงานของ HTTPS บน OSX

    1.cd /etc/apache2/extra

    2./System/Library/OpenSSL/misc/CA.pl -newca

    3.openssl genrsa -des3 -out webserver.key 1024

    4.openssl rsa -in webserver.key -out webserver.nopass.key

    5.openssl req -config /System/Library/OpenSSL/openssl.cnf -new -key webserver.key -out newreq.pem -days 3650

    6./System/Library/OpenSSL/misc/CA.pl -signreq

    7.แก้ไขแฟ้ม ssl.conf

    แก้ไขแฟ้ม config  อย่าลืมแก้ไข path ให้ถูกต้อง

    <IfModule mod_ssl.c>
    
    Listen 80
    Listen 443
    SSLRandomSeed startup builtin
    SSLRandomSeed connect builtin
    
    <VirtualHost _default_:443>
    
    SSLEngine on
    ServerName sslthis.dyndns.org
    ServerAdmin youremailaddress
    ErrorLog /var/log/httpd/error_log
    
    SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
    SSLCertificateFile /private/etc/apache2/extra/newcert.pem
    SSLCertificateKeyFile /private/etc/apache2/extra/webserver.nopass.key
    SSLCACertificateFile /private/etc/apache2/extra/demoCA/cacert.pem
    SSLCARevocationPath /private/etc/apache2/extra/demoCA/crl
    
    </VirtualHost>
    
    </IfModule>
    8.แก้ไขแฟ้ม  vi /etc/httpd/httpd.conf
    เปิด comment ตรง  LoadModule ssl_module กับ   Include /private/etc/apache2/extra/httpd-ssl.conf
    9.restart apache โดย apachectl restart
    

    http://hints.macworld.com/article.php?story=20041129143420344

    2010.10.06 / no responses / Category: OS

  • วิธีติดตั้ง oci8 สำหรับ php ใน mac osx leopard

    1.ดาวน์โหลด และ ติดตั้ง Oracle Instant Client Basic และ SDK
    URL http://www.oracle.com/technology/software/tech/oci/instantclient/htdocs/macsoft.html
    -Oracle Instant Client วางไว้ใน /usr/local/oracle ก็ได้
    -SDK วาง folder sdk ไว้ใน /usr/local/oracle
    -ใน fodler Oracle Instant Client
    ln -s libclntsh.dylib.10.1 libclntsh.dylib
    ln -s libclntsh.dylib libclntsh.so
    2.ติดตั้ง OCI8 โดยใช้คำสั่ง
    (ถ้าต้องการ compile 32 bit ให้ใช้คำสั่ง export CFLAGS=”-arch i386″ ก่อน)
    pecl install oci8
    ตอนถาม path ให้ระบุ path ที่วาง Oracle Instant Client ไว้ เช่น instantclient,/usr/local/oracle
    จะได้ผลลัพธ์ประมาณนี้
    Installing ‘/usr/lib/php/extensions/no-debug-non-zts-20090626/oci8.so’
    install ok: channel://pecl.php.net/oci8-1.4.3
    configuration option “php_ini” is not set to php.ini location
    You should add “extension=oci8.so” to php.ini
    3.ไปแก้ไขแฟ้ม /private/etc/php.ini
    เพิ่ม
    include_path=”.:/usr/share/PEAR”
    extension_dir=”/usr/lib/php/extensions/no-debug-non-zts-20090626″
    extension=oci8.so
    4.แก้ไขแฟ้ม
    /System/Library/LaunchDaemons/org.apache.httpd.plist
    <?xml version=”1.0″ encoding=”UTF-8″?>
    <!DOCTYPE plist PUBLIC “-//Apple Computer//DTD PLIST 1.0//EN” “http://www.apple.com/DTDs/PropertyList-1.0.dtd”>
    <plist version=”1.0″>
    <dict>
    <key>EnvironmentVariables</key>
    <dict>
    <key>DYLD_LIBRARY_PATH</key>
    <string>/usr/local/oracle</string>
    <key>LD_LIBRARY_PATH</key>
    <string>/usr/local/oracle</string>
    <key>TNS_ADMIN</key>
    <string>/usr/local/oracle</string>
    </dict>
    <key>Disabled</key>
    <true/>
    <key>Label</key>
    <string>org.apache.httpd</string>
    <key>ProgramArguments</key>
    <array>
    <string>/usr/bin/arch</string>
    <string>-i386</string>

    <string>/usr/sbin/httpd</string>
    <string>-D</string>
    <string>FOREGROUND</string>
    </array>
    <key>OnDemand</key>
    <false/>
    <key>SHAuthorizationRight</key>
    <string>system.preferences</string>
    </dict>
    </plist>

    5.สร้างแฟ้ม tnsnames.ora ใน /usr/local/oracle

    6.ให้ httpd เริ่มต้นการทำงานใหม่
    sudo launchctl unload /System/Library/LaunchDaemons/org.apache.httpd.plist
    sudo launchctl load /System/Library/LaunchDaemons/org.apache.httpd.plist

    2010.08.27 / no responses / Category: OS

  • วิธีติดตั้ง Oracle 10g (10.0.2.4) บน Mac OS X Snow Leopard 10.6

    ก่อนจะติดตั้ง oracle server บน MAC นั้นจะต้องมีการติดตั้ง Xcode ตั้งแต่ version 3.0 ขึ้นไป
    1.ขั้นตอนการเตรียมการ
    -ก่อนรันคำสั่งขอสิทธิเป็น root ก่อนโดยใช้คำสั่ง

        sudo -i
    

    สร้างผู้่ใช้ oracle โดยใช้คำสั่ง

    dscl . -create /groups/oinstall
    dscl . -append /groups/oinstall gid 600
    dscl . -append /groups/oinstall passwd "*"
    dscl . -create /users/oracle
    dscl . -append /users/oracle uid 600
    dscl . -append /users/oracle gid 600
    dscl . -append /users/oracle shell /bin/bash
    dscl . -append /users/oracle home /Users/oracle
    dscl . -append /users/oracle realname "Oracle software owner"
    mkdir /Users/oracle
    chown oracle:oinstall /Users/oracle
    

    เปลี่ยนรหัสผ่านให้ oracle

    passwd oracle

    แก้ไขค่า parameter ของ kernel
    vi /etc/sysctl.conf
    ใส่ข้อมูลดังนี้เข้าไป

    kern.sysv.semmsl=87381
    kern.sysv.semmns=87381
    kern.sysv.semmni=87381
    kern.sysv.semmnu=87381
    kern.sysv.semume=10
    kern.sysv.shmall=2097152
    kern.sysv.shmmax=2197815296
    kern.sysv.shmmni=4096
    kern.maxfiles=65536
    kern.maxfilesperproc=65536
    net.inet.ip.portrange.first=1024
    net.inet.ip.portrange.last=65000
    kern.corefile=core
    kern.maxproc=2068
    kern.maxprocperuid=2068
    

    ออกจาก root มาเป็น user oracle โดยใช้คำสั่ง su – oracle ก็ได้
    แก้ไข .bah_profile ของ user oracle โดยใช้คำสั่ง

    vi .bash_profile

    ใส่รายละเอียดดังนี้เข้าไป

    export DISPLAY=:0.0
    export ORACLE_BASE=$HOME
    umask 022
    ulimit -Hn 65536
    ulimit -Sn 65536
    
    

    เสร็จแล้วให้ reboot เครื่องก่อน เพื่อที่จะให้ค่าที่แก้ไขใน kernel มีผล
    2.ขั้นตอนการติดตั้ง
    -เมื่อ restart เสร็จแล้วให้ login เป็น user oracle
    -ให้ดาวน์โหลด oracle 10g จาก URL http://www.oracle.com/technology/software/products/database/oracle10g/htdocs/10204macsoft_x86-64.html
    -เมื่อดาวน์โหลดเสร็จแล้วให้คลาย zip โดยใช้คำสั่ง

    mkdir Install
    cd Install
    # download db.zip to this directory
    unzip db.zip
    cd db/Disk1

    -เปิด X11 ให้ทำงาน โดยอยู่ใน Applications -> Utilities -> X11
    เรียกคำสั่ง ติดตั้ง โดยมี parameter เพิ่มเพื่อให้เรียกใช้ 32 bit แทน

    ./runInstaller -J-d32

    -ติดตั้งตามปกติ แต่ตอนติดตั้งให้เลือกเป็น Standard Edition และติดตั้งเฉพาะ Software อย่างเดียว (Install Software Only) ส่วนของ database จะมาสร้างภายหลัง
    -ตอนติดตั้งถ้าเกิด Error ว่า “Error in invoking target ‘all_no_orcl ipc_g ihsodbc32’ …” อย่าปิดโปรแกรมติดตั้ง ให้เปิด Terminal มาอีกอันหนึ่ง แล้วพิมพ์คำสั่ง

    cd ~/oracle/product/10.2.0/db_1/rdbms/lib
    vi ins_rdbms.mk

    หาบรรทัดที่เขียนว่า $(HSODBC_LINKLINE) เพื่อที่จะปิด (ใน vi พิมพ์ :/HSODBC_LINKLINE เพื่อค้นหาได้) ถ้าเจอแล้วให้ปิด โดยใส่เครื่องหมาย # ไว้ จะได้เป็น

    #	$(HSODBC_LINKLINE)
    

    เสร็จแล้วกดปุ่มบันทึก แล้วไปกด Retry ในโปรแกรมติดตั้ง oracle ก็จะผ่านขั้นตอนนี้ได้
    ตอนสุดท้ายของการติดรั้งจะ oracle จะให้เราใช้สิทธฺิ root ในการรัน scrip จะมีประมาณนี้

    su - username
    sudo /Users/oracle/oracle/product/10.2.0/db_1/root.sh

    3.การสร้าง listener และ database
    -แก้ไขแฟ้ม .bash_profile ของ user oracle

    export ORACLE_HOME=/Users/oracle/oracle/product/10.2.0/db_1
    export DYLD_LIBRARY_PATH=$ORACLE_HOME/lib
    export ORACLE_SID=ORCL
    PATH=$PATH:$ORACLE_HOME/bin
    

    -รัน .bash_profile ให้ทำงาน

    . ~/.bash_profile
    

    -แก้ไข java ของ oracle ให้ทำงานในโหมด 32 bit ก่อน โดยแก้ไขแฟ้ม $ORACLE_HOME/jdk/bin/java ในบรรทัดที่มีข้อความ
    ...java -Xbootclasspath... เป็น ...java -d32 -Xbootclasspath....
    เสร็จแล้วให้ download oracle  ที่แก้ไขเพิ่มเพื่อให้รับ mac 10.6

    cd $ORACLE_HOME/bin
    curl -O http://rayapps.com/downloads/oracle_se.zip
    unzip oracle_se.zip
    chmod ug+s oracle
    #ตอนที่สร้าง database ของบางคนอาจจะยังเกิด error อยู่ ต้องเอาไปแทนตัวเก่าจึงจะหาย
    cd $ORACLE_HOME
    mv oracle oracle_bk
    unzip $ORACLE_HOME/bin/oracle_se.zip
    chmod ug+s oracle
    rm $ORACLE_HOME/bin/oracle_se.zip
    

    -สร้าง listerner โดยใช้คำสั่ง

    netca

    กดปุ่มไปเรื่อย ๆ ตามค่า default จนกว่า oracle จะบอกว่าติดตั้งสำเร็จ
    เสร็จแล้วสร้าง database โดยใช้คำสั่ง

    dbca

    เลือก

    • Create a Database
    • General Purpose
    • กำหนดค่า Global Database Name และ SID เป็นค่าที่ต้องการในที่นี้กำหนดเป็น ORCL
    • Specify password for SYS and SYSTEM users
    • อาจจะเลือกส่วนของ Sample Schemas ด้วยหรือไม่ก็ได้
    • ใสส่วนของ Character Sets เลือก TH8TISASCII เพื่อให้รองรับภาษาไทย

    ในกรณีที่เราใช้งานเป็นส่วนการพัฒนา เราจะเปลี่ยน listener ให้อยู่ที่ localhost แทน ถ้าเรา Fix IP เป็น IP เดิมตลอดไม่ต้องทำส่วนนี้ก็ได้

    vi $ORACLE_HOME/network/admin/listener.ora

    เปลี่ยนเป็น

    SID_LIST_LISTENER =
      (SID_LIST =
        (SID_DESC =
          (SID_NAME = PLSExtProc)
          (ORACLE_HOME = /Users/oracle/oracle/product/10.2.0/db_1)
          (PROGRAM = extproc)
        )
        (SID_DESC =
          (SID_NAME = orcl)
          (ORACLE_HOME = /Users/oracle/oracle/product/10.2.0/db_1)
        )
      )
    LISTENER =
      (DESCRIPTION_LIST =
        (DESCRIPTION =
          (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
          (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
        )
      )
    

    และเปลี่ยนข้อมูลแฟ้ม $ORACLE_HOME/network/admin/tnsnames.ora เป็น

    ORCL =
      (DESCRIPTION =
        (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
        (CONNECT_DATA =
          (SERVER = DEDICATED)
          (SERVICE_NAME = orcl)
        )
      )
    

    4.เพิ่มให้ Oracle ทำงานอัตโนมัติตอน start เครื่อง
    แก้ไขข้อมูลในแฟ้ม /etc/oratab บรรทัดสุดท้ายจาก N เป็น Y
    สร้างแฟ้ม

    mkdir /Library/StartupItems/Oracle
    cd /Library/StartupItems/Oracle
    vi Oracle

    ใส่ข้อมูลดังนี้

    #!/bin/sh
    
    # Suppress the annoying "$1: unbound variable" error when no option
    # was given
    if [ -z $1 ] ; then
      echo "Usage: $0 [start|stop|restart] "
      exit 1
    fi
    
    # source the common startup script
    . /etc/rc.common
    
    # Change the value of ORACLE_HOME to specify the correct Oracle home
    # directory for the installation
    ORACLE_HOME=/Users/oracle/oracle/product/10.2.0/db_1
    DYLD_LIBRARY_PATH=$ORACLE_HOME/lib
    export ORACLE_HOME DYLD_LIBRARY_PATH
    
    # change the value of ORACLE to the login name of the
    # oracle owner at your site
    ORACLE=oracle
    
    PATH=$PATH:$ORACLE_HOME/bin
    
    # Set shell limits for the Oracle Database
    ulimit -Hu 2068
    ulimit -Su 2068
    ulimit -Hn 65536
    ulimit -Sn 65536
    
    StartService()
    {
      ConsoleMessage "Starting Oracle Databases"
      su $ORACLE -c "$ORACLE_HOME/bin/dbstart $ORACLE_HOME"
    }
    
    StopService()
    {
      ConsoleMessage "Stopping Oracle Databases"
      su $ORACLE -c "$ORACLE_HOME/bin/dbshut $ORACLE_HOME"
    }
    
    RestartService()
    {
      StopService
      StartService
    }
    
    RunService "$1"
    

    เปลี่ยนโหมดให้รันได้

    chmod a+x Oracle

    แก้ไขแฟ้ม parameter

    vi StartupParameters.plist

    รายละเอียดเป็น

    {
      Description     = "Oracle Database Startup";
      Provides        = ("Oracle Database");
      Requires        = ("Disks");
      OrderPreference = "None";
    }
    

    หยุดการทำงานของ oracle

    sudo /Library/StartupItems/Oracle/Oracle stop

    เริ่มต้นการทำงานของ oracle

    sudo /Library/StartupItems/Oracle/Oracle start

    ซ่อนผู้ใช้ Oracle จาก login

    sudo defaults write /Library/Preferences/com.apple.loginwindow HiddenUsersList -array-add oracle

    link
    http://blog.rayapps.com/2009/09/14/how-to-install-oracle-database-10g-on-mac-os-x-snow-leopard/
    http://www.pythian.com/news/1937/quick-install-guide-for-oracle-10g-release-2-on-mac-os-x-leopard-intel/
    http://download.oracle.com/docs/cd/B19306_01/install.102/b25286/toc.htm

    2010.08.24 / 1 response / Category: OS

  • Oracle PL/SQL function to split strings into tokens

    ใช้งาน

    get_token(‘foo,bar,baz’,-1), — ‘baz’
    get_token(‘foo,bar,baz’,-2), — ‘bar’

    create or replace function get_token (
    the_list varchar2,
    the_index number,
    delim varchar2 :=';'
    )
    return varchar2
    is
    start_pos number;
    end_pos number;

    begin
    if the_index = 1 then
    start_pos := 1;

    elsif the_index < 0 then
    start_pos := instr(the_list, delim, -1, abs(the_index)) + 1;

    else
    start_pos := instr(the_list, delim, 1, the_index - 1);

    if start_pos = 0 then
    return null;
    else
    start_pos := start_pos + length(delim);
    end if;

    end if;

    if the_index < 0 then
    end_pos := instr(the_list, delim, start_pos+1, 1);
    else
    end_pos := instr(the_list, delim, start_pos, 1);
    end if;

    if end_pos = 0 then
    return substr(the_list, start_pos);
    else
    return substr(the_list, start_pos, end_pos - start_pos);
    end if;

    end get_token;

    ที่มา http://glosoli.blogspot.com/2006/07/oracle-plsql-function-to-split-strings.html

    2010.06.15 / no responses / Category: Programming

  • วิธีเขียน activex ใน vb6 เพื่อที่จะไม่ต้องแก้ไขค่า config ใน IE

    How To Implement IObjectSafety in VB6
    1.Copy 4 แฟ้มจาก \Common\Tools\VB\Unsupprt\Typlib\ ไปไว้ใน folder project
    ประกอบด้วย
    C1.EXE 408064 Bytes
    CL.EXE 37888 Bytes
    MKTYPLIB.EXE 86016 Bytes
    MSPDB41.DLL 271872 Bytes

    2.สร้างแฟ้ม Objsafe.odl ใน project folder
    [
    uuid(C67830E0-D11D-11cf-BD80-00AA00575603),
    helpstring("VB IObjectSafety Interface"),
    version(1.0)
    ]
    library IObjectSafetyTLB
    {
    importlib("stdole2.tlb");
    [
    uuid(CB5BDC81-93C1-11cf-8F20-00805F2CD064),
    helpstring("IObjectSafety Interface"),
    odl
    ]
    interface IObjectSafety:IUnknown {
    [helpstring("GetInterfaceSafetyOptions")]
    HRESULT GetInterfaceSafetyOptions(
    [in] long riid,
    [in] long *pdwSupportedOptions,
    [in] long *pdwEnabledOptions);

    [helpstring("SetInterfaceSafetyOptions")]
    HRESULT SetInterfaceSafetyOptions(
    [in] long riid,
    [in] long dwOptionsSetMask,
    [in] long dwEnabledOptions);
    }
    }

    3.ใช้ command ที่ folder ของ project

    SET PATH=C:\Program Files\Microsoft Visual Studio\VC98\Bin;C:\Program Files\Microsoft Visual Studio\VB98
    MKTYPLIB objsafe.odl /nocpp /tlb objsafe.tlb

    4.ในเมนู Project กด Reference
    5.ในหน้าต่างที่ปรากฏ Reference – ชื่อ project กด Browse ไปยังแฟ้ม Objsafe.tlb ที่อยู่ที่เดียวกับ folder project
    จะมี VB IObjectSafety Interface ขึ้นมาให้เลือกอันนี้
    ถ้าไม่มีให้มองหา IObjectSafetyTLB แทน สามารถใช้อันนี้แทนได้

    6.ใน Project สร้าง module ใหม่ชื่อ basSafeCtl โดยมีรายละเอียด code ดังนี้

    Option Explicit
    
     Public Const IID_IDispatch = "{00020400-0000-0000-C000-000000000046}"
     Public Const IID_IDispatchEx = "{A6EF9860-C720-11D0-9337-00A0C90DCAA9}"
     Public Const IID_IPersistStorage = "{0000010A-0000-0000-C000-000000000046}"
     Public Const IID_IPersistStream = "{00000109-0000-0000-C000-000000000046}"
     Public Const IID_IPersistPropertyBag = "{37D84F60-42CB-11CE-8135-00AA004BB851}"
    
     Public Const INTERFACESAFE_FOR_UNTRUSTED_CALLER = &H1
     Public Const INTERFACESAFE_FOR_UNTRUSTED_DATA = &H2
     Public Const E_NOINTERFACE = &H80004002
     Public Const E_FAIL = &H80004005
     Public Const MAX_GUIDLEN = 40
    
     Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" _
        (pDest As Any, pSource As Any, ByVal ByteLen As Long)
     Public Declare Function StringFromGUID2 Lib "ole32.dll" (rguid As _
        Any, ByVal lpstrClsId As Long, ByVal cbMax As Integer) As Long
    
     Public Type udtGUID
         Data1 As Long
         Data2 As Integer
         Data3 As Integer
         Data4(7) As Byte
     End Type
    
     Public m_fSafeForScripting As Boolean
     Public m_fSafeForInitializing As Boolean
    
     Sub Main()
         m_fSafeForScripting = True
         m_fSafeForInitializing = True
     End Sub
    

    7.เมนู Project -> Properties
    ใน General->Startup Object เลือก Sub Main

    8.เปิด source code หน้าต่าง activex control ที่เราสร้างไว้
    ในบรรทัดแรกให้เพิ่ม
    Implements IObjectSafety
    เข้าไป
    9.เพิ่ม code ด้านล่างเข้าไปใน sourcecode activex control ที่เราสร้างไว้
    Private Sub IObjectSafety_GetInterfaceSafetyOptions(ByVal riid As _
    Long, pdwSupportedOptions As Long, pdwEnabledOptions As Long)

    Dim rc As Long
    Dim rClsId As udtGUID
    Dim IID As String
    Dim bIID() As Byte

    pdwSupportedOptions = INTERFACESAFE_FOR_UNTRUSTED_CALLER Or _
    INTERFACESAFE_FOR_UNTRUSTED_DATA

    If (riid <> 0) Then
    CopyMemory rClsId, ByVal riid, Len(rClsId)

    bIID = String$(MAX_GUIDLEN, 0)
    rc = StringFromGUID2(rClsId, VarPtr(bIID(0)), MAX_GUIDLEN)
    rc = InStr(1, bIID, vbNullChar) - 1
    IID = Left$(UCase(bIID), rc)

    Select Case IID
    Case IID_IDispatch, IID_IDispatchEx
    pdwEnabledOptions = IIf(m_fSafeForScripting, _
    INTERFACESAFE_FOR_UNTRUSTED_CALLER, 0)
    Exit Sub
    Case IID_IPersistStorage, IID_IPersistStream, _
    IID_IPersistPropertyBag
    pdwEnabledOptions = IIf(m_fSafeForInitializing, _
    INTERFACESAFE_FOR_UNTRUSTED_DATA, 0)
    Exit Sub
    Case Else
    Err.Raise E_NOINTERFACE
    Exit Sub
    End Select
    End If
    End Sub

    Private Sub IObjectSafety_SetInterfaceSafetyOptions(ByVal riid As _
    Long, ByVal dwOptionsSetMask As Long, ByVal dwEnabledOptions As Long)
    Dim rc As Long
    Dim rClsId As udtGUID
    Dim IID As String
    Dim bIID() As Byte

    If (riid <> 0) Then
    CopyMemory rClsId, ByVal riid, Len(rClsId)

    bIID = String$(MAX_GUIDLEN, 0)
    rc = StringFromGUID2(rClsId, VarPtr(bIID(0)), MAX_GUIDLEN)
    rc = InStr(1, bIID, vbNullChar) - 1
    IID = Left$(UCase(bIID), rc)

    Select Case IID
    Case IID_IDispatch, IID_IDispatchEx
    If ((dwEnabledOptions And dwOptionsSetMask) <> _
    INTERFACESAFE_FOR_UNTRUSTED_CALLER) Then
    Err.Raise E_FAIL
    Exit Sub
    Else
    If Not m_fSafeForScripting Then
    Err.Raise E_FAIL
    End If
    Exit Sub
    End If

    Case IID_IPersistStorage, IID_IPersistStream, _
    IID_IPersistPropertyBag
    If ((dwEnabledOptions And dwOptionsSetMask) <> _
    INTERFACESAFE_FOR_UNTRUSTED_DATA) Then
    Err.Raise E_FAIL
    Exit Sub
    Else
    If Not m_fSafeForInitializing Then
    Err.Raise E_FAIL
    End If
    Exit Sub
    End If

    Case Else
    Err.Raise E_NOINTERFACE
    Exit Sub
    End Select
    End If
    End Sub

    10.แค่นี้ก็ใช้ได้แล้ว ให้ทดสอบโดย รัน activex ใน HTML

    2010.06.13 / no responses / Category: Programming

  • ฟังก์ชันใช้ตรวจสอบว่ามีอักษร utf อยู่ในข้อความหรือไม่

    function detectUTF8($string)
    {
    return preg_match('%(?:
    [\xC2-\xDF][\x80-\xBF] # non-overlong 2-byte
    |\xE0[\xA0-\xBF][\x80-\xBF] # excluding overlongs
    |[\xE1-\xEC\xEE\xEF][\x80-\xBF]{2} # straight 3-byte
    |\xED[\x80-\x9F][\x80-\xBF] # excluding surrogates
    |\xF0[\x90-\xBF][\x80-\xBF]{2} # planes 1-3
    |[\xF1-\xF3][\x80-\xBF]{3} # planes 4-15
    |\xF4[\x80-\x8F][\x80-\xBF]{2} # plane 16
    )+%xs', $string);
    }

    2010.05.26 / no responses / Category: Programming

หมวดหมู่

เว็บไซต์น่าสนใจ

 

พฤษภาคม 2012
พฤ อา
« ธ.ค.    
 123456
78910111213
14151617181920
21222324252627
28293031