把go语言编译成so文件,其中一个函数返回的是长字符串,如:1M左右。
在python代码只能接收到前200多个长度的字符串。
有没有大佬指条明路。
以下是go语言代码
```go
//export ReadScFile
func ReadScFile(pFilePath *C.char) *C.char {
sFilePath := C.GoString(pFilePath)
sFileText := ReadBinaryFile(sFilePath)
pReturnString := C.CString(*sFileText)
return pReturnString
}
//打开sc文件
func ReadBinaryFile(sFilePath string) *string {
pFileHandle, sError := os.Open(sFilePath)
if sError != nil {
fmt.Println(sError)
}
// 当函数执行到最后时,defer语句会按照逆序执行,返回该函数
defer pFileHandle.Close()
// 拼接后的字符串
var sFileText string
arBuff := make([]byte, 1024)
// 字符串总长度
var iWholeLen int
// 相当于python的while True
for {
// 读取的长度,读取时报错的内容
iReadLen, err := pFileHandle.Read(arBuff)
iWholeLen += iReadLen
sBuff := string(arBuff)
sFileText += sBuff
if (err == io.EOF) || (iReadLen < 0) {
break
}
}
return &sFileText
}
```
以下是python3代码:
```python
from ctypes import cdll, c_char_p, c_wchar_p
pTransfer = cdll.LoadLibrary(r"D:\go\pkg\transfer_param.so")
pTransfer.Concat.argtypes = [c_char_p, c_char_p]
pTransfer.Concat.restype = c_char_p
s_file_path = r"D:\test_file.log"
c_file_path = s_file_path.encode("utf-8")
# 赋值传参类型
pTransfer.ReadScFile.argtypes = [c_char_p]
# 赋值返回值类型
pTransfer.ReadScFile.restype = c_char_p
# 读取cs文件的内容
s_recive_address = pTransfer.ReadScFile(c_file_path)
# 此处只能输出 250 多个字节
print(f"s_recive_address = {s_recive_address}")
```
#1