ECPG có một số hỗ trợ hạn chế cho các ứng cách đọc kèo bóng đá C ++. Phần này mô tả một số cảnh báo.
TheECPG
9327_9508.c
Tệp. Tệp tiêu đề khai báo của các chức năng thư viện được sử cách đọc kèo bóng đá bởi các khối ngôn ngữ c màECPG
Tạo được gói trongBên ngoài "C" ...
Khối khi được sử cách đọc kèo bóng đá 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ý các cú pháp đặc biệt và các từ dành riêng của ngôn ngữ C ++. Vì vậy, một số mã SQL nhúng được viết trong mã ứng cách đọc kèo bóng đá C ++ sử cách đọc kèo bóng đá các tính năng phức tạp cụ thể cho C ++ có thể không được xử lý chính xác hoặc có thể không hoạt động như mong đợi.
Một cách an toàn để sử cách đọc kèo bóng đá mã SQL được nhúng trong ứng cách đọc kèo bóng đá C ++ đang ẩn các cuộc gọi ECPG trong mô -đun C mà mã ứng cách đọc kèo bóng đá C ++ gọi vào để truy cập cơ sở dữ liệu và liên kết cùng với phần còn lại của mã C ++. Nhìn thấyPhần 36.13.2về điều đó.
TheECPG
10818_11099ECPG
11130_11206
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 EXEC cách đọc kèo bóng đá bắt đầu phần khai báo; DBName char [1024]; EXEC cách đọc kèo bóng đá END TUYÊN BỐ TUYÊN BỐ; công cộng: Testcpp (); thử nghiệm void (); ~ Testcpp (); ; Testcpp :: testcpp () EXEC cách đọc kèo bóng đá kết nối với TestDB1; Exec cách đọc kèo bóng đá chọn pg_catalog.set_config ('search_path', '', false); Exec cách đọc kèo bóng đá cam kết; Void Test :: test () Exec cách đọc kèo bóng đá chọn current_database () vào: dbname; printf ("current_database = %s \ n", dbname); Testcpp :: ~ testcpp () EXEC cách đọc kèo bóng đá Ngắt kết nối tất cả;
Mã này sẽ dẫn đến một lỗi như thế này:
ECPG test_cpp.pgc
12138_12199
Để tránh vấn đề phạm vi này,test
Phương pháp có thể được sửa đổi để sử cách đọc kèo bóng đá 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 () EXEC cách đọc kèo bóng đá bắt đầu phần khai báo; char tmp [1024]; EXEC cách đọc kèo bóng đá END TUYÊN BỐ TUYÊN BỐ; Exec cách đọc kèo bóng đá chọn current_database () vào: tmp; strlcpy (dbname, tmp, sizeof (tmp)); printf ("current_database = %s \ n", dbname);
Nếu bạn hiểu những hạn chế kỹ thuật này củaECPG
13081_13555
Ba loại tệp phải được tạo: một 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 các lệnh cách đọc kèo bóng đá đượ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" #include <stdio.h Vô hiệu db_connect () EXEC cách đọc kèo bóng đá kết nối với TestDB1; Exec cách đọc kèo bóng đá chọn pg_catalog.set_config ('search_path', '', false); Exec cách đọc kèo bóng đá cam kết; Vô hiệu db_test () EXEC cách đọc kèo bóng đá bắt đầu phần khai báo; DBName char [1024]; EXEC cách đọc kèo bóng đá END TUYÊN BỐ TUYÊN BỐ; Exec cách đọc kèo bóng đá chọn current_database () vào: dbname; printf ("current_database = %s \ n", dbname); Vô hiệu db_disconnect () EXEC cách đọc kèo bóng đá Ngắt kết nối tất cả;
test_mod.h
Tệp tiêu đề với các khai báo của các hàm trong mô -đun C (14740_14754
). Nó được bao gồm bởitest_cpp.cpp
. Tệp này phải cóExtern "C"
Khối xung quanh các khai báo, vì nó sẽ được liên kết từ mô -đun C ++.
#ifdef __cplusplus bên ngoài "c" #endif void db_connect (); void db_test (); void db_disconnect (); #ifdef __cplusplus
test_cpp.cpp
Mã chính cho ứng cách đọc kèo bóng đá, bao gồmchính
thói quen và trong ví dụ này, một lớp C ++.
#include "test_mod.h" Lớp TestCpp công cộng: Testcpp (); thử nghiệm void (); ~ Testcpp (); ; Testcpp :: testcpp () db_connect (); Vô hiệu Testcpp :: test () db_test (); Testcpp :: ~ testcpp () db_disconnect (); int Main (Void) Testcpp *t = new testcpp (); t- test (); trả lại 0;
Để xây dựng ứng cách đọc kèo bóng đá, hãy tiến hành như sau. Chuyển thànhtest_mod.pgc
thànhtest_mod.c
bằng cách đọc kèo bóng đá chạyECPG
và tạotest_mod.o
bằng cách đọc kèo bóng đá biên dịchtest_mod.c
Với trình biên dịch c:
ECPG -O test_mod.c test_mod.pgc cc -c test_mod.c -o test_mod.o
Tiếp theo, tạotest_cpp.o
bằng cách đọc kèo bóng đá 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 các tệp đối tượng này,test_cpp.o
vàtest_mod.o
, thành một thực thi, sử cách đọc kèo bóng đá trình điều khiển trình biên dịch C ++:
C ++ test_cpp.o test_mod.o -lecpg -o test_cpp
Nếu bạn thấy bất cứ điều gì trong tài liệu không chính xác, không khớp Kinh nghiệm của bạn với tính năng cụ thể hoặc yêu cầu làm rõ thêm, Vui lòng sử cách đọc kèo bóng đáMẫu nàyĐể báo cáo vấn đề tài cách đọc kèo bóng đá.