ECPG có một số hỗ trợ hạn chế cho các ứng soi kèo bóng đá truoctran C ++. Phần này mô tả một số cảnh báo.
TheECPG
9720_9901.c
Tệp. Tệp tiêu đề khai báo của các chức năng thư viện được sử soi kèo bóng đá truoctran bởi các khối ngôn ngữ c màECPG
Tạo được gói trongExtern "C" ...
Khối khi được sử soi kèo bóng đá truoctran theo C ++, vì vậy chúng sẽ hoạt động liền mạch trong C ++.
Tuy nhiên, nói chung,ECPG
Bộ tiền xử lý chỉ hiểu C; Nó không xử lý soi kèo bóng đá truoctran cú pháp đặc biệt và soi kèo bóng đá truoctran từ dành riêng của ngôn ngữ C ++.
Một cách an toàn để sử soi kèo bóng đá truoctran mã SQL được nhúng trong ứng soi kèo bóng đá truoctran C ++ đang ẩn các cuộc gọi ECPG trong mô -đun C mà mã ứng soi kèo bóng đá truoctran C ++ gọi vào để truy cập cơ sở dữ liệu và liên kết với phần còn lại của mã C ++. Nhìn thấyPhần 35.13.2về điều đó.
TheECPG
Bộ tiền xử lý hiểu phạm vi của soi kèo bóng đá truoctran biến trong C. Trong ngôn ngữ C, điều này khá đơn giản vì phạm vi của soi kèo bóng đá truoctran biến dựa trên soi kèo bóng đá truoctran khối mã của chúng. Tuy nhiên, trong C ++, soi kèo bóng đá truoctran biến thành viên lớp được tham chiếu trong một khối mã khác với vị trí được khai báo, vì vậyECPG
Bộ tiền xử lý sẽ không hiểu phạm vi của soi kèo bóng đá truoctran biến thành viên lớp.
Ví dụ, trong trường hợp sau,ECPG
Bộ tiền xử lý không thể tìm thấy bất kỳ khai báo nào cho biếndbname
trongtest
Phương thức, vì vậy sẽ xảy ra lỗi.
Lớp TestCpp
Mã này sẽ dẫn đến soi kèo bóng đá truoctran lỗi như thế này:
ECPG test_cpp.pgc
test_cpp.pgc: 28: Lỗi: biến "dbname" không được khai báo
Để tránh vấn đề phạm vi này,test
Phương pháp có thể được sửa đổi để sử soi kèo bóng đá truoctran một biến cục bộ làm bộ nhớ trung gian. Nhưng cách tiếp cận này chỉ là một cách giải quyết kém, bởi vì nó tăng lên mã và giảm hiệu suất.
void testcpp :: test ()
Nếu bạn hiểu những hạn chế kỹ thuật này củaECPG
Bộ tiền xử lý trong C ++, bạn có thể đi đến kết luận rằng liên kết các đối tượng C và các đối tượng C ++ ở giai đoạn liên kết để cho phép các ứng soi kèo bóng đá truoctran C ++ sử soi kèo bóng đá truoctran các tính năng ECPG có thể tốt hơn so với việc viết một số lệnh SQL nhúng trong mã C ++ trực tiếp. Phần này mô tả một cách để tách một số lệnh SQL nhúng khỏi mã ứng soi kèo bóng đá truoctran C ++ với một ví dụ đơn giản.
Ba loại tệp phải được tạo: soi kèo bóng đá truoctran tệp C (*.pgc
), tệp tiêu đề và tệp C ++:
test_mod.pgc
Một mô-đun tuyến phụ để thực thi soi kèo bóng đá truoctran lệnh SQL được nhúng trong C. Nó sẽ được chuyển đổi thànhtest_mod.c
bởi bộ tiền xử lý.
#include "test_mod.h"
test_mod.h
Tệp tiêu đề với soi kèo bóng đá truoctran khai báo của soi kèo bóng đá truoctran hàm trong mô -đun C (test_mod.pgc
). Nó được bao gồm bởitest_cpp.cpp
. Tệp này phải cóExtern "C"
Khối xung quanh soi kèo bóng đá truoctran khai báo, vì nó sẽ được liên kết từ mô -đun C ++.
#ifdef __cplusplus
test_cpp.cpp
Mã chính cho ứng soi kèo bóng đá truoctran, bao gồmchính
thói quen và trong ví dụ này, soi kèo bóng đá truoctran lớp C ++.
#include "test_mod.h"
Để xây dựng ứng soi kèo bóng đá truoctran, hãy tiến hành như sau. Chuyển thànhtest_mod.pgc
thànhtest_mod.c
bằng cách chạyECPG
và tạotest_mod.o
bằng cách biên dịchtest_mod.c
Với trình biên dịch c:
ECPG -O test_mod.c test_mod.pgc
Tiếp theo, tạotest_cpp.o
bằng cách biên dịchtest_cpp.cpp
Với trình biên dịch C ++:
C ++ -C test_cpp.cpp -o test_cpp.o
Cuối cùng, liên kết soi kèo bóng đá truoctran tệp đối tượng này,test_cpp.o
vàtest_mod.o
, thành một thực thi, sử soi kèo bóng đá truoctran trình điều khiển trình biên dịch C ++:
C ++ test_cpp.o test_mod.o -lecpg -o test_cpp