返回列表 发帖
回复 6# czjt1234

多谢大佬指导, 这个贴子, 我主要是想学习下, 编译C或C++为DLL, 然后在PS中调用DLL的方法和事项

TOP

本帖最后由 小白龙 于 2023-3-14 20:28 编辑

回复 3# pd1


    多谢大佬指导, 现在代码和事项都有了, 就差编译dll了, 我不装vs有别的方式编译DLL吗, 以前看到过文章可以用什么tcc编译器搞,但是不知道怎么搞

TOP


QQ 20147578

TOP

回复 4# Five66


    多谢大佬指导, 我现在大致明白了思路, VS太大了, 有没有其它的编译小工具呢? 在PS中写函数, 感觉执行速度会慢, 应该没有调用dll快
:

TOP

直接编译成dll只能以p/invoke方式调用.为了兼容性,用msvc,软件就是visual studio(图形界面)或visual studio build tools(字符界面).注意要在编译选项给出导出函数或在源码需要导出的函数前加上
__declspec(dllexport)

想要在ps直接使用,需要转成c++/cli的代码并且以/clr的编译选项编译成dll,有点麻烦

其实也可以直接在ps里写个文字跟拼音的hashtable,然后索引就行了

(有多音字的存在,不管怎么样都不会100%准确)

TOP

extern "C" _declspec(dllexport)void h2p(const char* szChinese)
{
    uint32_t bufLen = 0;
    char pinyinBuf[MAXBUFLEN] = { 0 };
    //const char* szChinese = "中华人民共和国 People's Republic of China";
    getPinyin(szChinese, pinyinBuf, MAXBUFLEN, &bufLen, enmPinyinMode_FirstUpper);
    printf("%s\n", pinyinBuf);
}COPY
$code=@"
using System;
using System.Runtime.InteropServices;
public static class Api{
[DllImport("C:/Users/Administrator/source/repos/test/x64/Release/test.dll")]
public static extern int h2p(String ss);
    }
"@
Add-Type -TypeDefinition $code
[Api]::h2p("我是中国人")COPY

TOP

你自己写一个PS就可以了。保留他原来的CODE部分,用来识别编号;
对输入的字符串用GBK编码一个一个判断。若为一个字节则保留原字符,2个字节则高位码在前低位码在后,大于160则减去160再把高位码乖100合成4位数再去查CODE。若4位查不到则输出原字符,可能是符号之类。
QQ: 458609586
脚本优先 [PowerShell win10]

TOP

返回列表