使用c# 開發 php的com元件

尘梦發表於2024-03-19

使用c# 開發 php的com元件 讀取word內容(表單域、書籤內容)

注意問題:
1、檢視php版本(64、32)
2、檢視系統版本
3、按照系統對應的版本註冊元件

這裡環境是64 .net 4.0

所以路徑是:C:\Windows\Microsoft.NET \Framework64(64位Framework框架)\ net版本 \ RegAsm.exe

php傳遞給c# 編碼問題 (死活不對,使用bstr、各種編碼轉換都不行,最後使用base64)

vs2017 =》需要設定 專案-屬性-生成-為Com互操作
vs2017 => 應用程式-》程式集資訊-》選中com

具體程式碼如下:
com元件是以介面形式開放給php呼叫的所以這塊要注意


[ComVisible(true)]
    [Guid("自己生成")]
    public interface IMyComInterface
    {
        Document OpenDoc(string fileName,bool readOnly=false);
        string GetFormFields(string fieldName, int section=0);
        string GetTableFields(int tableIndex, int rowIndex, int colIndex, int section = 0);
        string getBookmarkText(string sBookmark);
        string getBookmarkText1(string sBookmark);
        void strings(string text);
        string GetTableFormFields(int iTable, int iRow, int iCol, int iSection = 0, object sFieldName = null);
        int getSectionTableRowsNum(int section, int tableIndex);
        void Closes();
        int getSectionTableNum(int section);

    }


[ComVisible(true)]
    [Guid("自己生成")]
    [ClassInterface(ClassInterfaceType.None)]
    public class MyComClass : IMyComInterface
    {
實現的程式碼
    }


幾個小問題 處理編碼 

 public static string getBase64(string base64String="")
        {
            if (!IsBase64String(base64String)) {

                return base64String;
            }

            byte[] data = Convert.FromBase64String(base64String);

            string originalString = Encoding.UTF8.GetString(data);

            return originalString;
        }

 public static string RemoveInvisibleCharacters(string input)
        {
           
            // 控制字元:\p{C}
            // 格式字元:\p{Cf}
            // 私用使用區:\p{Co}
            // 不可見字元:\p{Cs}
            string pattern = @"\p{C}+|\p{Cf}+|\p{Co}+|\p{Cs}+";

            // 使用正規表示式移除不可見字元
            return Regex.Replace(input, pattern, string.Empty);
        }

 //表單域提取
static string Escape(string str)
        {
            //Regex regex = new Regex("(\\\\)*\\\\?'");
            //str = regex.Replace(str, "\\'");
            str = Regex.Replace(str, @"FORMTEXT|[\x00-\x1F\x7F]", "").Trim();
            return str;
        }

相關文章